一、go单元测试介绍
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。
单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
二、单元测试使用
1、要开始一个单元测试,需要准备一个 go 源码文件,在命名文件时需要让文件必须以_test结尾。
2、单元测试源码文件可以由多个测试用例组成,每个测试用例函数需要以Test为前缀
func TestXXX( t *testing.T )
3、测试用例文件不会参与正常源码编译,不会被包含到可执行文件中。
4、测试用例文件使用 go test 指令来执行,没有也不需要 main() 作为函数入口。所有在以_test结尾的源码内以Test开头的函数会自动被执行。
5、测试用例可以不传入 *testing.T 参数
6、新建的测试文件一般和源文件 放同一目录
7、go单元测试,引入包 testing
示例:
//待测文件hello.go
package main
import "fmt"
func Hello() string {
return "hello world"
}
func main(){
fmt.Print(Hello())
}
//测试文件hello_test.go
package main
import "testing"
func TestHello(t *testing.T) {
a:= Hello()
if a != "hello world" {
t.Error("不通过")
}
}
1、单元测试命令
//1、单个文件进入到测试文件所在目录
go test hello_test.go hello.go
ok command-line-arguments (cached)
//2、如果该目录有go.mod存在,直接 go test
>go test
PASS
ok hello 3.634s
PASS 表示测试成功
2、运行指定单元测试用例
go test 指定文件时默认执行文件内的所有测试用例。可以使用-run参数选择需要的测试用例单独执行
//以下文件还有多个测试用例
package code11_3
import "testing"
func TestA(t *testing.T) {
t.Log("A")
}
func TestAK(t *testing.T) {
t.Log("AK")
}
func TestB(t *testing.T) {
t.Log("B")
}
func TestC(t *testing.T) {
t.Log("C")
}
这里指定 TestA 进行测试:
$ go test -v -run TestA select_test.go
=== RUN TestA
--- PASS: TestA (0.00s)
select_test.go:6: A
=== RUN TestAK
--- PASS: TestAK (0.00s)
select_test.go:10: AK
PASS
ok command-line-arguments 0.003s
TestA 和 TestAK 的测试用例都被执行,原因是-run跟随的测试用例的名称支持正则表达式,使用-run TestA$即可只执行 TestA 测试用例。
3、标记单元测试结果
当需要终止当前测试用例时,可以使用 FailNow
func TestFailNow(t *testing.T) {
t.FailNow()
}
还有一种只标记错误不终止测试的方法,代码如下:
func TestFail(t *testing.T) {
fmt.Println("before fail")
t.Fail()
fmt.Println("after fail")
}
测试结果如下:
=== RUN TestFail
before fail
after fail
--- FAIL: TestFail (0.00s)
FAIL
exit status 1
FAIL command-line-arguments 0.002s
从日志中看出,第 3 行调用 Fail() 后测试结果标记为失败,但是第 4 行依然被程序执行了。
4、单元测试日志
每个测试用例可能并发执行,使用 testing.T 提供的日志输出可以保证日志跟随这个测试上下文一起打印输出。testing.T 提供了几种日志输出方法,详见下表所示。
方 法
备 注
Log
打印日志,同时结束测试
Logf
格式化打印日志,同时结束测试
Error
打印错误日志,同时结束测试
Errorf
格式化打印错误日志,同时结束测试
Fatal
打印致命日志,同时结束测试
Fatalf
格式化打印致命日志,同时结束测试
版权归原作者 勤天 所有, 如有侵权,请联系我们删除。