11. 测试

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 其他测试功能 #

  • 代码覆盖率
  • 从使用者角度设计测试函数
  • 编写函数方便测试
  • 启动与关闭资源函数用于测试初始化
comments powered by Disqus