测试代码存放在包含TestXxx函数的以*_test.go文件名结尾的文件中
40.1 官方文档的“自相矛盾”
包内测试:测试代码放在与被测包同名的包中
包外测试:测试代码放在名为被测包包名+"_test"的包中
40.2 包内测试与包外测试
包内测试:
- 优:白盒测试,高覆盖率
- 缺:测试代码自身需要经常性的维护;容易有包循环引用的硬伤,例如strings包和testing包
包外测试:
- 优:黑盒测试,测试代码健壮,不需要经常调整逻辑;无循环引用的问题
- 缺:存在测试盲区,覆盖率低(可通过安插后门的方式解决)
安插后门:
- 例子:,
$GOROOT/src/fmt/export_test.go
和$GOROOT/src/strings/export_test.go
export_test.go
文件仅在go test
阶段与被测试包(fmt)一并被构建入最终的测试二进制文件中
结论:
- 优先使用包外测试
- 包外测试更适合编写偏向集成测试的用例,包内测试可以聚焦于验证内部逻辑的正确性