作者:安徒生笔下苍老了谁1_120 | 来源:互联网 | 2023-09-23 17:42
通常单元测试,能够帮我在代码发不到线上环境前,提前发现问题。本文着重讲解go语言的单元测试模块testing的使用、go test命令行、以及案例
一、代码示例:本案例是对上一讲的greetings/greetings.go模块中的Hello方法的测试
package greetingsimport ("regexp""testing"
)func TestHello(t *testing.T) {//定义参数结构体type args struct {name string}//定义测试用例结构体tests := []struct {name stringargs argswant *regexp.RegexpwantErr bool}{//添加单侧用例{"第一个单元测试用例",args{name:"test_name"},regexp.MustCompile("test_name"),false,},{"第二个单元测试用例",args{name:""},regexp.MustCompile(""),false,},}//循环执行单测用例for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {got, err := Hello(tt.args.name)if (err != nil) != tt.wantErr {t.Errorf("Hello() error = %v, wantErr %v", err, tt.wantErr)return}if !tt.want.MatchString(got) {t.Errorf("Hello() got = %v, want %v", got, tt.want)}})}
}
二、go语言testing的使用
- go语言内置的testing包,对单侧的集成支持,可以协助我们方便的编写单元测试,并运行。
- go语言的单元测试,是命名约定优先:单侧文件命名为“_test.go”后缀;单测文件中的单测方法以“Test”开头。在执行go test命令时,会自动扫描_test.go结尾go文件中的Test方法
三、go test 命令
cd到单侧文件所在层级目录,执行go test指令,可以自动扫描该目录下所有以_test.go文件结尾,以Test开头的单测方法,并将结果输出到控制台。
![](https://img.php1.cn/3cd4a/1eebe/cd5/ddcc574beb16294e.jpeg)
尝试修改第二个单测用例的wantErr改为fasle,实际是返回true,重新执行go test命令
![](https://img.php1.cn/3cd4a/1eebe/cd5/eec57030b649a106.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9sdHl5,size_16,color_FFFFFF,t_70)
如果要输出详细执行信息,可以添加-v参数:go test -v
![](https://img.php1.cn/3cd4a/1eebe/cd5/8343fdbffb0056b5.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9sdHl5,size_16,color_FFFFFF,t_70)