Go语言工程实践之测试

62 阅读1分钟

类别

回归测试->集成测试->单元测试,盖率逐层变大,成本却逐层降低

单元测试

image.png

规则

  • 所有测试文件以_test.go结尾
  • func TestXx(t *testing.T)
  • 初始化逻辑放到func main(m *testing.M)中

Assert

  • import github.com/stretchr/testify/assert
  • 使用assert.Equal(t, a, b)

覆盖率

  • go test --cover 在运行测试代码的同时计算出覆盖率
  • Tips
    • 一般覆盖率:50-60%,较高覆盖率80%+
    • 测试分支相对独立、全面覆盖
    • 测试单元粒度足够小,函数单一职责

依赖

  • 幂等:任意多次执行所产生的影响均与一次执行的影响相同
  • 稳定:单元测试是相对独立
  • 快速Mock函数
    • 为一个函数打桩
    • 为一个方法打桩
  • 不再依赖本地文件
  • 示例:
monkey.Patch(Xxx, func() string { return })
defer monkey.Unpath(ReadFirstLine)

基准测试

  • 测试一段程序运行时的性能
  • func BenchmarkXxx(b *testing.B)
  • b.ResetTimer()进行时间重置
  • b.RunParallel()并行测试
  • fastrand提高高并发下的速度