对于一个写好的功能模块,我们还需要对其进行单元测试,确保该模块不会出现其他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 splitdemoimport "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}
点击查看代码
package splitdemoimport ( "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报告