🧠 图解记忆:参数表描述变化,测试函数只表达稳定行为;点击图片可查看原图。
**目的:** 同一段逻辑,多组输入输出,一组用例。落地方式:
- pytest:
@pytest.mark.parametrize - Java:
@ParameterizedTest - Go:
t.Run+ table-driven(表驱动测试,Go 社区标准写法)
Go 表驱动示例(可运行示例):
go
func TestCalculatePrice(t *testing.T) {
tests := []struct {
name string
input float64
coupon float64
want float64
}{
{"normal", 100, 20, 80},
{"zero", 0, 20, 0},
{"over-deduct", 10, 20, 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := CalculatePrice(tt.input, tt.coupon); got != tt.want {
t.Errorf("got %v, want %v", got, tt.want)
}
})
}
}数据放哪: 简单数据放代码里,复杂数据放 YAML/JSON 外部文件,测试数据统一管理。
边界思维: 正常值、边界值、异常值、空值都要覆盖——说出这几个词,面试官就知道你写过真测试。
