golang单元测试

270 阅读2分钟

1. 单元测试

单元测试 是指对软件中的最小可测试单元进行检查和验证

TDD是测试驱动开发(Test-Driven Development)的英文简称, TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码.

2. 怎么写单元测试

Go自带了测试框架和工具,在testing包中,以便完成单元测试(T类型)和性能测试(B类型)。

2.1怎么命名

文件名: go test 命令,会自动读取源码目录下面名为 *_test.go 的文件, 文件命名必须以 _test.go 结尾

方法名: 已Test开头, Test后加下划线可以拼小写, 否则必须大写

2.2 怎么写测试

摘自 src/math/arith_s390x_test.go

func TestCosNovec(t *testing.T) {
  if !HasVX {
    t.Skipf("no vector support")
  }
  for i := 0; i < len(vf); i++ {
    if f := CosNoVec(vf[i]); !veryclose(cos[i], f) {
      t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
    }
  }
  for i := 0; i < len(vfcosSC); i++ {
    if f := CosNoVec(vfcosSC[i]); !alike(cosSC[i], f) {
      t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
    }
  }
}
  1. 方法名以 Test 开头, 方法必须为 t *testing.T (FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf)
  2. HasVX成立, t.Skipf 不再继续执行, 算作执行成功
  3. t.Errorf 输出失败信息, 测试用例执行失败 , 执行完成为成功
方法名含义
t.FailNow()结束测试
t.Fatal/t.Fatalf()结束测试并打印信息
t.Fail()测试失败但继续运行
t.Error()/t.Errorf()测试失败但继续运行
t.SkipNow()结束测试
t.Skip()/t.Skipf()结束测试并打印信息

2.3 怎么运行

#运行目录下所有 test 用例
go test ./testing/*
​
#输出运行过程中打印信息
go test -v ./testing/*
​
#运行 test_example.go 文件中 Test_Name方法
go test -v -run Test_Name ./testing/test_example.go
​
#输出正则运行 Test_ 后带数字的方法
go test -v -run Test_\d+.*? ./testing/* 
​
#查看覆盖率
go test -cover ./test/*  
go test ./test/* -coverprofile=cover.out
​
#运行 internal 目录下所有test开头的函数
go test ./internal/*

常见指令参数:

参数含义
-v显示运行详细信息
-run运行指定的方法
-cover查看测试覆盖率

3. 怎么使用goland编辑器快速使用

shift + command + T 生成测试用例模版

image.png