【Go】堆和栈变量
点击阅读更多查看文章内容
1. 文件命名规则
- 测试文件必须与被测文件同名,并加上
_test
后缀- 被测文件:
calculator.go
- 测试文件:
calculator_test.go
- 被测文件:
- 测试文件需放在同一包内
- 若测试内部未导出函数,可使用
package packagename_test
(需导入被测包)。
- 若测试内部未导出函数,可使用
2. 测试函数签名
函数名必须以
Test
开头,后接大写字母(如TestAdd
)。参数必须为
*testing.T
:1
2
3func TestAdd(t *testing.T) {
// 测试逻辑
}
3. 子测试(Subtests)
使用 t.Run()
创建嵌套测试,便于分组和选择性运行:
1 | func TestMultiply(t *testing.T) { |
4. 表格驱动测试(Table-Driven Tests)
通过结构体切片定义多组输入和期望输出,减少重复代码:
1 | func TestDivide(t *testing.T) { |
5. 断言与错误报告
常用方法:
方法 用途 t.Error()
/t.Errorf()
标记失败但继续执行后续测试 t.Fatal()
/t.Fatalf()
标记失败并立即终止当前测试函数 t.Log()
输出日志(仅在 -v
标志时显示)示例:
1
2
3
4
5
6func TestSubtract(t *testing.T) {
result := Subtract(5, 3)
if result != 2 {
t.Errorf("Expected 2, got %d", result)
}
}
6. 测试覆盖率
生成覆盖率报告:
1
2go test -coverprofile=coverage.out
go tool cover -html=coverage.out # 生成 HTML 可视化报告覆盖率模式:
-covermode=count
(记录执行次数)或set
(仅记录是否执行)。
7. 基准测试(Benchmark)
函数名以
Benchmark
开头,参数为 *testing.B对测试方法运行多次,得到方法运行时间等性能指标
1
2
3
4
5func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(1, 2)
}
}运行基准测试:
1
go test -bench=. -benchmem # 同时输出内存分配