Go 测试,go test 工具的具体指令 flag
接上篇文章 Go 单元测试,基准测试,http 测试。本篇文章介绍 Go 测试工具 go test
,包括各种子命令、参数之类的内容。你可以通过 go test -h
查看帮助信息。
其基本形式是:
go test [build/test flags] [packages] [build/test flags & test binary flags]
执行 go test
命令,它会在 *_test.go
中寻找 test 测试
、benchmark 基准
和 examples 示例
函数。测试函数必须以 TestXXX
的函数名出现(XXX 为以非小写字母开头),基准函数必须以 BenchmarkXXX
的函数名出现,示例函数必须以 ExampleXXX
的形式。三种函数类似下面的签名形式:
// test 测试函数
func TestXXX(t *testing.T) { ... }
// benchmark 基准函数
func BenchmarkXXX(b *testing.B) { ... }
// examples 示例函数,其相关命名方式可以查看第一篇文章
func ExamplePrintln() {
Println("The output of\nthis example.")
// Output: The output of
// this example.
}
或
func ExamplePerm() {
for _, value := range Perm(4) {
fmt.Println(value)
}
// Unordered output: 4
// 2
// 1
// 3
// 0
}
更多请查看 go help testfunc
。
go test
命令还会忽略 testdata
目录,该目录用来保存测试需要用到的辅助数据。
go test 有两种运行模式:
1、本地目录模式,在没有包参数(例如 go test
或 go test -v
)调用时发生。在此模式下,go test
编译当前目录中找到的包和测试,然后运行测试二进制文件。在这种模式下,caching 是禁用的。在包测试完成后,go test
打印一个概要行,显示测试状态、包名和运行时间。
2、包列表模式,在使用显示包参数调用 go test
时发生(例如 go test math
,go test ./...
甚至是 go test .
)。在此模式下,go 测试编译并测试在命令上列出的每个包。如果一个包测试通过,go test
只打印最终的 ok
总结行。如果一个包测试失败,go test
将输出完整的测试输出。如果使用 -bench
或 -v
标志,则 go test
会输出完整的输出,甚至是通过包测试,以显示所请求的基准测试结果或详细日志记录。
下面详细说明下 go test
的具体用法,flag 的作用及一些相关例子。需要说明的是:一些 flag 支持 go test
命令和编译后的二进制测试文件。它们都能识别加 -test.
前缀的 flag,如 go test -test.v
,但编译后的二进制文件必须加前缀 ./sum.test -test.bench=.
。
有以下测试文件 sum.go
:
package sum
func Sum(a, b int)...
剩余内容已隐藏