82 测试类别 #
分类:
- 端到端测试
- 集成测试
- 单元测试
构建标记
//go:build foo
package bar
可用于类似go test --tags=integration -v .
来指定运行某些tag测试文件.
用环境变量选择测试分支执行
长久运行跳过
if testing.Short() {
t.Skip("skipping long-running test")
}
go test -short -v .
83 race标记 #
进行数据竞争检测
go test -race ./...
84 测试执行模式 #
t.Parallel()
在go test中用于并行执行测试用例
go test -shuffle=on -v .
乱序执行
85 表格驱动测试 #
可用IDE帮助生成
86 测试中休眠 #
可用sleep进行测试并发场景.
87 time API测试 #
比如业务中使用time.Now
作为变量,影响了测试.
需要考虑如何覆盖测试到.
88 测试包推荐 #
https://pkg.go.dev/net/http/httptest
https://pkg.go.dev/testing/iotest
89 benchmarks #
b.ResetTimer()
可重置benchmarks计时器.
测试环境机器工作负载会影响benchmarks结果.
存在编译器优化会影响benchmarks结果,例如被测试函数过于简单被内联inlining.
内联伪代码
// 原始函数
function add(a, b) {
return a + b;
}
// 主函数调用函数
function main() {
var x = add(1, 2);
}
// 经过内联优化后
function main() {
// 将add函数定义插入main函数中
var x;
{
var a = 1;
var b = 2;
x = a + b;
}
}
观察者效应是测试代码自身可能影响到测试对象的行为.
90 其他测试功能 #
- 代码覆盖率
- 从使用者角度设计测试函数
- 编写函数方便测试
- 启动与关闭资源函数用于测试初始化