Ответ
В Go тесты делятся на несколько типов:
- Unit-тесты - тестируют отдельные функции/методы. Используют пакет
testing:
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("Expected 5, got %d", result)
}
}
- Примеры (Examples) - тесты с выводом, проверяют документацию:
func ExampleAdd() {
fmt.Println(Add(2, 3))
// Output: 5
}
- Benchmark-тесты - измеряют производительность:
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(2, 3)
}
}
-
Интеграционные тесты - проверяют взаимодействие компонентов (обычно в отдельных файлах с тегами
integration) -
Table-driven тесты - популярный шаблон для unit-тестов с набором входных/выходных данных:
func TestAdd(t *testing.T) {
tests := []struct {
a, b, want int
}{
{2, 3, 5},
{0, 0, 0},
{-1, 1, 0},
}
for _, tt := range tests {
if got := Add(tt.a, tt.b); got != tt.want {
t.Errorf("Add(%d, %d) = %d, want %d", tt.a, tt.b, got, tt.want)
}
}
}