Testy oparte na tabelach
Testy parametryzowane z podtestami
Testy oparte na tabelach to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Czym są testy tabelaryczne?
Testy tabelaryczne definiują wycinek przypadków testowych (dane wejściowe i oczekiwane wyniki), a następnie iterują po nim za pomocą jednego ciała testu. Ograniczają powielanie kodu i ułatwiają dodawanie przypadków.
Podstawowy wzorzec
Zdefiniuj strukturę dla każdego przypadku, iteruj po niej za pomocą t.Run i zgłaszaj niepowodzenia, podając nazwę przypadku:
tests := []struct {
name string
input int
want int
}{
{"zero", 0, 0},
{"positive", 3, 9},
{"negative", -2, 4},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := Square(tt.input)
if got != tt.want {
t.Errorf("Square(%d) = %d; want %d", tt.input, got, tt.want)
}
})
}Wycinek struktur anonimowych
Użyj anonimowej struktury jako typu przypadku testowego — definicja przypadku pozostaje blisko testu i nie trzeba nadawać nazwy typowi używanemu tylko raz.
Uwzględnianie przypadków błędów
Dodaj pole wantErr bool, aby sprawdzać, czy funkcje zwracają błędy w oczekiwanych sytuacjach:
{"invalid input", -1, 0, true},
// in the loop:
if (err != nil) != tt.wantErr {
t.Errorf("wantErr %v, got err %v", tt.wantErr, err)
}Nazywanie podtestów
Opisowe pole nazwy sprawia, że przyczyny niepowodzeń są jasne. Konkretny przypadek można uruchomić za pomocą -run TestFunc/case_name.
Równoległe podtesty t.Run
Oznacz każdy podtest jako równoległy i przechwyć zmienną pętli, aby uruchamiać przypadki współbieżnie (jest to istotne, gdy testy są ograniczone przez operacje wejścia-wyjścia).
for _, tt := range tests {
tt := tt // capture
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
// ...
})
}Wspólna konfiguracja dla przypadku
Użyj pól funkcyjnych tt.setup, aby umożliwić konfigurację osobną dla każdego przypadku bez powielania kodu szablonowego:
type tc struct {
setup func() *DB
input string
want int
}Zachowanie czytelności przypadków
Jeśli przypadki stają się duże, zdefiniuj je jako nazwane zmienne lub wczytaj je z plików testdata. Zachowaj zwięzłość tabeli — w miarę możliwości umieszczaj jeden przypadek w jednym wierszu.
Testowanie wielu wyników
Testuj tabelarycznie funkcje zwracające wiele wartości, dodając osobne pole dla każdego wyniku:
type tc struct {
input string
wantVal int
wantErr bool
}Testify assert w testach tabelarycznych
Używaj github.com/stretchr/testify/assert w testach tabelarycznych, aby tworzyć czytelne asercje bez rozwlekłych bloków if/t.Errorf.
assert.Equal(t, tt.want, got, tt.name)Dokumentowanie za pomocą przypadków
Tabela przypadków służy jako żywa dokumentacja. Przyszli programiści mogą szybko zapoznać się z nią, aby zrozumieć wszystkie obsługiwane dane wejściowe i przypadki brzegowe.
Szybkie sprawdzenie
Dlaczego w testach tabelarycznych przechwytuje się zmienną pętli (tt := tt) przed wywołaniem t.Parallel?
Podsumowanie: testy tabelaryczne
Najważniejsze informacje:
- Wycinek struktur obejmujący dane wejściowe, oczekiwane wyniki i znacznik błędu
- Iterowanie za pomocą t.Run w celu tworzenia nazwanych, niezależnych podtestów
- Przechwycenie zmiennej pętli (tt := tt) przed wywołaniem t.Parallel
- Przypadki służą jako żywa dokumentacja obsługiwanych zachowań
Często zadawane pytania
Czy lekcja „Testy oparte na tabelach” jest bezpłatna?
Tak — pełny tekst „Testy oparte na tabelach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Testy oparte na tabelach”?
Testy parametryzowane z podtestami Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Testy oparte na tabelach”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pisanie testów jednostkowych za pomocą testing
- Testy oparte na tabelach
- Obiekty zastępcze w testach: mocki i stuby
- Pokrycie testami i testify