0Pricing
Go Academy · Lekcja

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

  1. Pisanie testów jednostkowych za pomocą testing
  2. Testy oparte na tabelach
  3. Obiekty zastępcze w testach: mocki i stuby
  4. Pokrycie testami i testify
← Powrót do Go Academy