Go语言自带的测试工具链是开发过程中保障代码质量的重要手段,go test命令作为核心工具,能够自动识别并执行符合命名规范的测试文件与测试函数,无需额外引入第三方测试框架即可完成基础的测试工作。

Go测试的基础规范
要使用go test命令运行测试,首先需要遵循Go语言的测试文件与函数命名规范,否则测试框架无法识别对应的测试内容。
- 测试文件必须以
_test.go作为文件名后缀,且需要和被测试的代码文件放在同一个包目录下。 - 测试函数分为三类:单元测试函数以
Test开头,基准测试函数以Benchmark开头,示例测试函数以Example开头。 - 所有测试函数的参数都有固定要求:单元测试函数接收
*testing.T类型参数,基准测试函数接收*testing.B类型参数。
基础测试代码示例
我们先编写一个简单的待测试函数,再编写对应的单元测试代码,演示go test命令的基础运行流程。
首先是待测试的代码文件calc.go:
package calc
// Add 实现两个整数相加的功能
func Add(a, b int) int {
return a + b
}
对应的测试文件calc_test.go内容如下:
package calc
import (
"testing"
)
// TestAdd 测试Add函数的功能是否正确
func TestAdd(t *testing.T) {
result := Add(1, 2)
if result != 3 {
t.Errorf("Add(1,2)结果错误,预期为3,实际为%d", result)
}
}
在calc.go所在的目录下执行go test命令,即可运行测试:
go test
如果测试通过,会输出类似PASSnok your/package/path 0.001s的结果,其中PASS表示测试通过,后面的时间是测试执行耗时。
go test常用参数说明
go test命令支持多个参数,可以满足不同的测试场景需求,常用的参数如下:
| 参数 | 作用说明 |
|---|---|
| -v | 输出详细的测试执行信息,包括每个测试函数的执行结果和名称 |
| -run | 指定要运行的测试函数名称的正则表达式,只执行匹配到的测试函数 |
| -bench | 执行基准测试,参数为基准测试函数名称的正则表达式 |
| -count | 指定每个测试函数执行的次数,默认单元测试执行1次 |
| -cover | 输出测试的代码覆盖率信息 |
常用参数使用示例
运行指定测试函数
如果目录下有多个测试函数,只想运行TestAdd函数,可以使用-run参数:
go test -v -run TestAdd
加上-v参数后,会输出TestAdd函数的详细执行过程。
执行基准测试
编写基准测试函数测试Add函数的性能,在calc_test.go中添加如下代码:
// BenchmarkAdd 测试Add函数的性能
func BenchmarkAdd(b *testing.B) {
// 循环执行b.N次,b.N的值会由测试框架自动调整,确保测试结果准确
for i := 0; i < b.N; i++ {
Add(1, 2)
}
}
执行基准测试的命令如下:
go test -bench=.
命令中的-bench=.表示运行所有基准测试函数,执行后会输出每次操作的耗时、每秒可执行的次数等性能相关数据。
查看代码覆盖率
执行如下命令可以查看测试的代码覆盖率:
go test -cover
输出结果会显示当前测试覆盖了百分之多少的代码行,帮助开发者判断测试是否充分。
注意事项
- 测试文件中的测试函数首字母必须大写,否则无法被测试框架识别。
- 如果测试函数执行过程中调用
t.Fatal或者t.Fatalf,会直接终止当前测试函数的执行,而t.Error和t.Errorf只会标记测试失败,不会终止执行。 - 基准测试函数中不要包含无关的逻辑,只保留需要测试性能的核心代码,避免影响测试结果的准确性。
- 如果项目依赖了外部资源,测试时可以使用
testify等第三方库简化断言逻辑,但go test命令本身不需要额外配置即可运行基础测试。