dlv 对go test调试
例如: 要对TestAAA进行dlv断点调试: dlv test -- -test.run TestAAA -test.v
覆盖率及其查询
- go test -v -gcflags=all=-l -cover ./... -coverprofile=coverage.data ./...
- 查看各个文件以及总体的覆盖率:go tool cover -func=coverage.data -o coverage.txt
- 用网页查看没有覆盖到的代码(打开html文件即可):go tool cover -html=coverage.data -o coverage.html
go test 带条件编译
- go test -run TestManagerMonitoringCleanUp1 -gcflags=all=-l -tags "simulator" -v
- 有些场景下某个函数在不同的文件有相同的实现,然后用不同的tag来编译不同的文件,这时候需要用到tag指令
go test可以指定package或者列表做test
- -coverpkg pkg1,pkg2,pkg3
并行执行测试(Parallelizing tests)
- 默认情况下,指定包的测试是按照顺序执行的,但也可以通过在测试的函数内部使用 t.Parallel() 来标志某些测试也可以被安全的并发执行(和默认的一样,假设参数名为 t)
打桩库
- 可以对某些不方便测试的接口进行打桩,方便于我们对关心的逻辑进行核心测试
- 值得注意的点是gomonkey中描述的feature:support a patch for a private member method(可以对结构体中的私有函数进行mock)
之前遇到的坑
func Testxxxxxx(t *testing.T) {
xxx1()
xxx2()
xxx3()
}
- 经验: go test打印出来的panic, 不一定是离它最近的行数, 可能是理它很远,要在周围几条test用例都单独测试下才能确定答案 这种主要是因为golang的很多日志库是异步的。