go 中 testing 包中的数据类型 M/T/B/PB
简介
testing.M | 对 main 方法进行的测试 |
---|---|
testing.T | 对函数/方法进行单元测试 |
testing. B | 对性能进行的测试 |
testing.PB | - |
执行测试
命令 | 作用 |
---|---|
go test 【包名】或 go test . | 运行当前 package 内的所有用例 |
go test ./... 或 go test 【目录名】/... | 递归执行当前目录下所有用例: |
go test -v [单元测试文件]. // 如 go test -v foo_test.go | 运行指定文件单元测试 |
go test -v [单元测试文件] -run [单元测试函数]. | 运行指定单元测试用例://如 go test -v foo_test.go -run TestFoo |
go test -bench . | 压测 |
执行单元测试时出现 调用函数 undefined 的解决方法:
如 执行 xj_test.go 下的 TestXj 函数,调用 xj.go 文件下的 Xj 函数
go test -v xj_test.go -run TestXj ———> 会出现 Xj 函数 undefined
更换,加上调用函数的文件:
go test -v xj_test.go xj.go -run TestXj
testing.M
[Go]Go 单元测试的前置和后置调用--TestMain - 掘金 (juejin.cn)
setup() // 运行前
code := m.Run() //运行运行测试。 它返回一个退出代码以传递给 os.Exit。
teardown() // 运行后
os.Exit(code) //退出码
testing.T
对函数/方法进行单元测试
-
常用
t.Run() // 执行子单元测试 t.Log() // 输出日志,t.Logf() t.Name() // 输出单元测试的名称 t.Parallel() // 所有有t.Parallel()调用的单元测试 并行执行 t.TempDir() // 返回一个临时用于测试的目录地址,每次执行都不一样 t.Cleanup() // Cleanup 注册一个在测试(或子测试)及其所有子测试完成时要调用的函数。 清理函数将在最后添加,首先调用的顺序中调用 t.Setenv() // 设置测试环境变量,测试完成后自动清除,不能用于有t.Parallel()的测试函数 t.Helper() // 用于标注该函数是帮助函数,报错时将输出帮助函数调用者的信息,而不是帮助函数的内部信息,比如A函数是公共函数,B,C都是测试函数,且都调用A函数,那么假设A报错了,那并不知道是B还是C调用,所以此时就需要在A函数内部加上次标注,让报错信息更准确,有助于定位。 t.Fail() // 函数出现失败之后仍然执行 t.Deadline() // 无 func TestT(t *testing.T) { t.Cleanup(func() { // 将在所有子函数执行后执行 fmt.Println("测试Cleanup......") }) t.Run("t.Fail()", func(t *testing.T) { Expect(t).Equal(true, false) }) t.Run("Setenv", func(t *testing.T) { t.Setenv("xj", "xxx") getenv := os.Getenv("xj") t.Log("getenv:", getenv) }) t.Run("v1", func(t *testing.T) { name := t.Name() t.Log(name) dir := t.TempDir() t.Log(dir) }) }
-
判定失败接口
- Fail 失败继续
- FailNow 失败终止
-
打印信息接口
- Log 数据流 (cout 类似)
- Logf format (printf 类似)
- SkipNow 跳过当前测试
- Skiped 检测是否跳过
-
综合接口产生
- Error / Errorf 报告出错继续 [ Log / Logf + Fail ]
- Fatel / Fatelf 报告出错终止 [ Log / Logf + FailNow ]
- Skip / Skipf 报告并跳过 [ Log / Logf + SkipNow ]
testing.B
- 首先 , testing.B 拥有 testing.T 的全部接口。
SetBytes( i uint64)
统计内存消耗, 如果你需要的话。SetParallelism(p int)
制定并行数目。StartTimer / StopTimer / ResertTimer
操作计时器- b.RunParallel(func(pb *testing.PB) {}) // 可以测试并发性能
type BenchmarkResult struct {
N int // 迭代次数
T time.Duration // 基准测试花费的时间
Bytes int64 // 一次迭代处理的字节数
MemAllocs uint64 // 总的分配内存的次数
MemBytes uint64 // 总的分配内存的字节数
}
testing.PB
其他
-test.short
go test -v ./... -test.short
代码中可以使用 if testing.Short() {} 语句,能够检测 go test 命令行中有无-test.short,然后执行自己的业务代码(推荐是用来缩减单元测试的代码块)