您的当前位置:首页正文

浅触go中的单元测试

2024-10-17 来源:个人技术集锦

对于一个写好的功能模块,我们还需要对其进行单元测试,确保该模块不会出现其他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}
创建测试文件,split_test.go,开始测试Split函数功能
点击查看代码
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报告

显示全文