Table-driven-тесты — это способ написания тестов, где создается таблица данных (slice с набором входных данных и ожидаемых результатов), затем пишется один тест, который по циклу походит через все эти эти кейсы.
Запускаются такие тесты через t.Run в цикле.
В PHP аналог этих тестов это использование аннотаций `@dataProvider addProvider`.
Рассмотрим реальный пример:
package main
import (
"testing"
)
func TestMultiplicationTable(t *testing.T) {
table := []struct {
a,
b,
expected int
}{
{2, 3, 6},
{4, 5, 20},
{6, 7, 42},
}
for _, test := range table {
t.Run(fmt.Sprintf("Multiply %d by %d", test.a, test.b), func(t * testing.T) {
result := multiply(test.a, test.b)
if result != test.expected {
t.Errorf("Expected %d, got %d", test.expected,
result)
}
})
}
}
func multiply(a, b int) int {
return a * b
}
Выполним тест go test -v и увидим результаты выполнения:
=== RUN TestMultiplicationTable
=== RUN TestMultiplicationTable/Multiply_2_by_3
--- PASS: TestMultiplicationTable/Multiply_2_by_3 (0.00s)
=== RUN TestMultiplicationTable/Multiply_4_by_5
--- PASS: TestMultiplicationTable/Multiply_4_by_5 (0.00s)
=== RUN TestMultiplicationTable/Multiply_6_by_7
--- PASS: TestMultiplicationTable/Multiply_6_by_7 (0.00s)
--- PASS: TestMultiplicationTable (0.00s)
PASS
ok my/package 0.03s
Таким образом, table-driven-тест — это тест, который перебирает slice и выполняет тесты с заданными значениями, проверяя результаты. Это делает код короче, расширяемее и удобнее для CI-report.





