对于一个写好的功能模块,我们还需要对其进行单元测试,确保该模块不会出现其他bug,或者输出不是期望结果
对于一个go程序,主要设计以下命令:

  • 执行测试

    go test -v / go test

  • 执行某个子测试用例

    go test -run=TestSplit/case_1

  • 查看测试覆盖率

    go test -cover

  • 将测试覆盖率结果输出到一个文件

    go test -cover -coverprofile=c.out

  • 在浏览器生成HTML报告

    go tool cover -html=c.out

以下是一个demo
创建一个split.go文件,编写函数模块Split

点击查看代码
package splitdemo

import "strings"

func Split(str string, sep string) []string {
	var ret []string
	index := strings.Index(str, sep)
	for index >= 0 {
		ret = append(ret, str[:index])
		str = str[index+1:]
		index = strings.Index(str, sep)
	}
	ret = append(ret, str)
	return ret
}

创建测试文件,split_test.go,开始测试Split函数功能

点击查看代码
package splitdemo

import (
	"reflect"
	"testing"
)

type SplitCase struct {
	str  string
	sep  string
	want []string
}

func TestSplit(t *testing.T) {
	var testMap = map[string]SplitCase{
		"case_1": {"popoe", "o", []string{"p", "p", "e"}},
		"case_2": {"my name", "n", []string{"my ", "ame"}},
		"case_3": {"hello,world", "l", []string{"he", "", "o,wor", "d"}},
	}
	for name, sc := range testMap {
		t.Run(name, func(t *testing.T) {
			got := Split(sc.str, sc.sep)
			if !reflect.DeepEqual(got, sc.want) {
				t.Fatalf("got:%#v,want:%#v", got, sc.want)
			}
		})
	}
}

执行上述命令,之后就可以看到各种信息

生成HTML报告