Один тест проверяет много кейсов: слайс структур с входом и ожидаемым результатом, цикл по кейсам и вызов t.Run(tc.name, ...). Удобно добавлять кейсы и избегать дублирования. Имена кейсов делают осмысленными для отчета.
func TestAdd(t *testing.T) {
cases := []struct{ a, b, want int }{
{1, 2, 3}, {0, 0, 0}, {-1, 1, 0},
}
for _, tc := range cases {
t.Run(fmt.Sprintf("%d+%d", tc.a, tc.b), func(t *testing.T) {
if got := Add(tc.a, tc.b); got != tc.want {
t.Errorf("got %d; want %d", got, tc.want)
}
})
}
}