Go 语言中自带有一个轻量级的测试框架 testing包 和自带的 go test 命令来实现单元测试和性能测试。
1.1.1. 一、testing包的测试规范。
go 语言的测试包testing,有几个规范。
1、测试文件要以 xxx_test.go 命名,也就是以下划线test结尾。
2、测试函数需要TestXxx 命名: func TestXxx(*testing.T)
,其中 Xxx 可以是任何字母数字字符串(但第一个字母不能是 [a-z]),用于识别测试用例。在这些函数中,使用 Error, Fail 或相关方法来发出失败信号。
在某文件夹下,运行 `go test` 命令。程序会自动加载所有的xxx_test.go文件,并且运行里面的
func TestXxx(*testing.T)
类型的函数。
1.1、示例如下:
有一个源文件userService.go,和一个测试文件userService_test.go。
- userService.go的内容:就是一个Add函数。
func Add(n1 int, n2 int) int {
return n1 + n2
}
- userService_test.go的内容:
import (
"fmt"
"testing"
)
//编写测试1
func TestAdd(t *testing.T) {
res := Add(34,21)
if res != 55 {
// 程序退出,并输出日志
t.Fatalf("程序错误,期望值=%v,实际值=%v",55,res)
}
//输出日志
t.Logf("执行正确。。")
}
//编写测试2
func TestHello(t *testing.T) {
fmt.Println("TestHello 被调用。。。")
}
有2个测试方法:TestAdd、TestHello。
- 命令行运行测试。
在userService_test.go文件所在目录,执行 go test -v
可以看到测试的结果如下:
$ go test -v
=== RUN TestAdd
--- PASS: TestAdd (0.00s)
userService_test.go:15: 执行正确。。
=== RUN TestHello
TestHello 被调用。。。
--- PASS: TestHello (0.00s)
PASS
ok testingDemo/testCase01 0.323s
- 在IDEA中,可以点击下面箭头所示的小图标运行测试:
1.1.2. 二、细节说明:
1) 测试用例文件名必须以 _test.go 结尾。 比如 userService_test.go。
2) 测试用例函数必须以 Test 开头,一般来说就是 Test+被测试的函数名,比如: TestAdd。
3) TestAdd(t *tesing.T) 的形参类型必须是 *testing.T 【看文档】。
4) 一个测试用例文件中,可以有多个测试用例函数,比如 userService_test.go文件中中有TestAdd、TestHello。
5) 运行测试用例指令:
(1) cmd>go test [如果运行正确,无日志,错误时,会输出日志]
(2) cmd>go test -v [运行正确或是错误,都输出日志]
(3) 测试单个文件,需要把测试文件、原文件一起放在命令中。
例如:
cmd>go test -v userService_test.go userService.go
不区分userService_test.go 和 userService.go的顺序。可以是:
cmd>go test -v userService.go userService_test.go
(4) 测试单个方法:
例如测试TestAdd方法:
cmd>go test -v -test.run TestAdd
6) 当出现错误时,可以使用 t.Fatalf 来格式化输出错误信息,并退出程序。
7) t.Logf 方法可以输出相应的日志。