子测试
概念说明
子测试通过 t.Run 把一个测试函数拆成多个命名场景。
它常与表格驱动测试一起使用,让多组输入输出更清晰。
每个子测试都有独立名称。
测试失败时,可以快速定位是哪一个场景失败。
语法/规则
- 使用
t.Run(name, func(t *testing.T) { ... })创建子测试。 - 用结构体切片保存多组测试用例。
- 子测试名称要表达场景含义。
- 循环变量传入闭包时要注意捕获问题。
- 可以用
go test -run TestName/SubName只运行某个子测试。
子测试示例
| |
运行命令:
| |
输出结果:
| |
常见错误
- 子测试名称都写成空字符串,失败时不好定位。
- 表格用例字段太模糊,看不出输入和期望输出。
- 并行子测试中没有处理循环变量捕获,导致测试数据错乱。