golang提供了标准库testing用来支持测试
import "testing"
| 类型 | 格式 | 作用 |
|---|---|---|
| 单元测试 | 函数名前缀为Test | 测试程序的一些逻辑行为是否正确 |
| 基准(压力)测试 | 函数名前缀为Benchmark | 测试函数的性能 |
| 示例测试 | 函数名前缀为Example | 为文档提供示例文档 |
| 模糊(随机)测试 | 函数名前缀为Fuzz | 生成一个随机测试用例去覆盖认为测不到的各种赋值场景 |
Go语言推荐测试文件和源代码文件放在一块,测试文件以_test.go结尾。
比如,当前package有calc.go一个文件,我们想测试calc.go中的Add和Mul函数,那么一个新建calc_test.go作为测试文件。
注意:创建项目后需要
go mod init初始化项目
实例演示:
calc.go
package main
func Add(a int, b int) int {
return a + b
}
func Mul(a int, b int) int {
return a * b
}
calc_test.go
package main
import "testing"
func TestADD(t *testing.T) {
if ans := Add(1, 2); ans != 3 {
t.Errorf("1 + 2 expected be 3, but %d got", ans)
}
if ans := Add(-10, -20); ans != -30 {
t.Errorf("-10 + -20 expected be -30, but %d got", ans)
}
}
- 测试用例名称一般命名为
Test加上待测试的方法名- 测试用的参数有且只有一个,在这里是
t *testing.T- 基准测试(Benchmark)的参数是
*testing.B类型- TestMain的参数是
*testing.M类型
run test结果为:
Running tool: C:\Go\bin\go.exe test -timeout 30s -run ^TestADD$ go_pro
ok go_pro 0.272s
还可以在终端运行 go test,则该包下的所有测试用例都会被执行
PS E:\golang开发学习\go_pro> go test
PASS
ok go_pro 0.244s
PASS表示测试用例运行成功,FAIL表示测试用例运行失败
或使用 go test -v,-v参数会显示每个用例的测试结果,另外-cover参数可以查看覆盖率
PS E:\golang开发学习\go_pro> go test -v
=== RUN TestADD
--- PASS: TestADD (0.00s)
PASS
ok go_pro 0.245s
PS E:\golang开发学习\go_pro> go test -cover
PASS
coverage: 50.0% of statements
ok go_pro 0.417s
如果只想运行其中一个用例,例如TestADD,可以用-run参数指定,该参数支持通配符*,和部分正则表达式,如^、$。
PS E:\golang开发学习\go_pro> go test -run TestADD -v
=== RUN TestADD
--- PASS: TestADD (0.00s)
PASS
ok go_pro 0.180s
| 方法 | 作用 |
|---|---|
| Log | 打印日志,同时结束测试 |
| Logf | 格式化打印日志,同时结束测试 |
| Error | 打印错误日志,同时结束测试 |
| Errorf | 格式化打印错误日志,同时结束测试 |
| Fatal | 打印致命日志,同时结束测试 |
| Fatalf | 格式化打印致命日志,同时结束测试 |
子测试是Go语言内置支持的,可以在摸个测试用例中,根据测试场景使用t.Run创建不同的子测试用例
calc_test.go
func TestMul(t *testing