测试的大致种类
- 回归测试(在具体场景的手动测试)
- 集成测试(对于系统功能维度的测试,通过服务暴露的接口做自动化的一些测试)
- 单元测试(程序员写完在调试的时候干的事情?)
单元测试(提升修复效率)
对函数或接口的输入输出验证?
单元测试很有必要
单元测试
单元测试的规则
- 所有文件以_test.go结尾
- 函数命名用func Testxxx(*testing.T)
- 初始化逻辑放到TestMain中(使用
go test xxx_test.go xxx.go运行test函数进行单元测试)
func TestMain(m *testing.M){
//测试数据配置和加载
code:=m.Run()
//资源释放等收尾工作
os.Exit(code)
}
覆盖率
go test xxx_test.go xxx.go --cover
加上--cover参数为何就能计算覆盖率?
答:覆盖率公式=执行的代码行数/有效代码行数。
实际上,基本要求覆盖率在50%~60%,较高时可达80%+(较重要的项目)。
测试分支应当相互独立,全面覆盖 函数尽量写的小一点,更容易覆盖
依赖
Mock 打桩? monkey:github.com/bouk/monkey (替换执行函数,解决某些依赖问题)
基准测试
(性能测试)?和前面没关系啊
通对函数进行测试计算时间,判断执行效率
命名规则(类似单元测试)
- func Benchmarkxxx(b *testing.b){}
fastrand()函数相较rand()损失了随机数列的一致性,但可以解决在高并发场景下的某些性能问题。位于("github.com/bytedance/g…")