Go 语言中的测试使用 go test命令。
go test 命令是一个按照一定约定和组织的测试代码的驱动程序。
在项目目录内,所有以_test.go为后缀名的源代码文件都是 go test 测试文件,不会被编译到最终的可执行文件中。
go test 是 go 语言自带的测试工具,其中包含的是两类,单元测试和性能测试 :
go test -c
编译 go test 成为可执行的二进制文件,但是不运行测试。
go test -v
显示详细的流程
go test -run
测试指定文件的指定函数,如 :
go test -v -run TestSay user_test.go
go test -v -run TestSay
要开始一个单元测试,需要准备一个 go 源码文件,在命名文件时需要让文件必须以_test结尾。
在*_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。
类型 格式 作用
测试函数 函数名前缀为 Test 测试程序的一些逻辑行为是否正确
基准函数 函数名前缀为 Benchmark 测试函数的性能
示例函数 函数名前缀为 Example 为文档提供示例文档
go test 命令会遍历所有的*_test.go文件中符合上述命名规则的函数,然后生成一个临时的main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件。
单元测试函数需要以Test为前缀,例如:
func TestXXX( t *testing.T )
项目目录结构
|_ 项目根目录
|_ user // 模拟一个测试模块
|_ user.go
|_ main.go
|_ user_test.go // 测试文件
user.go 源码
package user
import "time"
func Info() {
println("Info start...")
time.Sleep(time.Second * 2)
println("Info end ... ")
}
func Say() {
res := 0
for i := 0; i < 9900000; i++ {
res += i
}
println(res)
}
user_test.go 源码
package main
import (
"godemo/user"
"testing"
)
func TestUserInfo(t *testing.T) {
user.Info()
}
func TestSay(t *testing.T) {
user.Say()
}
测试命令
go test -v
go test -v -run TestSay
基准测试就是在一定的工作负载之下检测程序性能的一种方法。基准测试的基本格式如下:
func BenchmarkName(b *testing.B){
// ...
}
示例 :
func BenchmarkSay(t *testing.B) {
user.Say()
}
测试命令 :
go test -bench=Say -benchmem
结果 :
go test -bench=Say -benchmem
goos: windows
goarch: amd64
pkg: godemo
cpu: AMD Ryzen 5 3600 6-Core Processor
BenchmarkSay-12
1000000000 0.005001 ns/op 0 B/op 0 allocs/op
PASS
ok
godemo 0.350s
其中 BenchmarkSay-12 表示对 Say 函数进行基准测试,数字12表示 GOMAXPROCS 的值,这个对于并发基准测试很重要。
1000000000 和 0.005001 ns/op 表示每次调用 Say 函数耗时 0.005 ns,这个结果是 1000000000 次调用的平均值。