Wzorce testowania
Właśnie skończyłeś implementację serwisu przetwarzania płatności. Działa w twoich testach ręcznych, ale nie masz automatycznych testów. Pisanie testów dla 15 funkcji obejmujących tworzenie płatności, walidację, zwroty i obsługę webhooków wydaje się zajmować więcej czasu niż napisanie samego serwisu. Więc wysyłasz go bez testów, obiecując sobie, że dodasz je później. Dwa tygodnie później refaktoryzacja psuje logikę zwrotów i nikt tego nie wyłapuje, dopóki klient nie zgłosi problemu.
AI jest wyjątkowo dobre w pisaniu testów. Może przeanalizować twój kod, zidentyfikować ważne ścieżki i przypadki brzegowe, i wygenerować kompleksowy zestaw testów w kilka minut. Kluczem jest wiedza, jak promptować o testy, które faktycznie wyłapują błędy, a nie testy, które po prostu osiągają liczby pokrycia.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- Workflow generowania kompleksowych zestawów testów z istniejącego kodu
- Wzorzec TDD z AI (najpierw pisz testy, potem implementację)
- Techniki dodawania testów do nietestowanego kodu legacy
- Gotowe prompty do skopiowania, które produkują wysokiej jakości, łatwe w utrzymaniu testy
Wzorzec test-first (TDD z AI)
Dział zatytułowany „Wzorzec test-first (TDD z AI)”Najpotężniejszy wzorzec testowania z AI: najpierw napisz testy, potem pozwól agentowi napisać implementację i iterować, aż testy przejdą.
Dlaczego to działa: AI pisze testy na podstawie twojej specyfikacji oczekiwanego zachowania. Potem pisze implementację, która przechodzi te testy. Jeśli test nie przechodzi, implementacja jest błędna (nie test), więc AI naprawia implementację. To zapobiega częstemu problemowi “naprawiania” testów przez AI, aby pasowały do wadliwego kodu.
Generowanie testów dla istniejącego kodu
Dział zatytułowany „Generowanie testów dla istniejącego kodu”Generowanie kompleksowego zestawu testów
Dział zatytułowany „Generowanie kompleksowego zestawu testów”Dodawanie testów do kodu legacy
Dział zatytułowany „Dodawanie testów do kodu legacy”Dla nietestowanego kodu, gdy nie jesteś pewien, co robi:
Testy charakteryzujące są niezbędne przed refaktoryzacją kodu legacy. Mówią ci, kiedy refaktoryzacja zmienia zachowanie, nawet jeśli oryginalne zachowanie nie było udokumentowane.
Budowanie na istniejącym zestawie testów
Dział zatytułowany „Budowanie na istniejącym zestawie testów”Jeden z najpraktyczniejszych wzorców: przyrostowe rozszerzanie pokrycia testami poprzez analizę tego, co nie jest testowane.
Wykorzystanie nieprzechodzących testów z błędów produkcyjnych
Dział zatytułowany „Wykorzystanie nieprzechodzących testów z błędów produkcyjnych”Gdy napotkasz błąd produkcyjny, pierwszym krokiem powinno być napisanie testu, który go odtwarza:
We discovered a bug: orders with decimal quantities (e.g., 2.5 units)cause the total calculation to return NaN.
Before fixing the bug:1. Write a failing test that demonstrates the exact bug2. The test should pass valid decimal quantities and assert the correct total3. Run the test to confirm it fails with the current code
Then fix the bug and confirm the test passes.
This ensures the fix actually addresses the issue and prevents regression.Wzorzec fabryk danych testowych
Dział zatytułowany „Wzorzec fabryk danych testowych”Zamiast pisać inline obiekty testowe w każdym teście, stwórz funkcje fabryczne:
Kiedy coś nie działa
Dział zatytułowany „Kiedy coś nie działa”AI pisze testy, które tylko potwierdzają implementację. Jeśli test wywołuje funkcję i sprawdza, czy zwracana wartość jest tym, co funkcja zwraca, nie testuje niczego. Określ oczekiwane zachowanie jawnie w prompcie: “should return 42 when given inputs X and Y.”
Testy przechodzą, ale nie wyłapują prawdziwych błędów. Testy zbyt skupiają się na szczęśliwych ścieżkach. Zawsze jawnie żądaj testowania ścieżek błędów, przypadków brzegowych i warunków granicznych.
AI “naprawia” test zamiast kodu. Wyraźnie powiedz: “The test represents the correct behavior. The implementation is wrong. Fix the implementation.”
Wygenerowane testy są niestabilne. Testy zależne od czasu, losowych wartości lub stanu zewnętrznego są nierzetelne. Dodaj do swojej reguły testowania: “Never use real timers, random values, or network calls in unit tests. Mock everything.”
Plik testowy staje się zbyt duży. Podziel testy według domeny (testy auth, testy profilu, testy płatności) zamiast mieć jeden monolityczny plik testowy na serwis.
Co dalej
Dział zatytułowany „Co dalej”- Workflow debugowania — Testy to fundament skutecznego debugowania
- Strategie refaktoryzacji — Testy umożliwiają bezpieczną refaktoryzację
- Workflow recenzji — Recenzowanie testów generowanych przez AI obok kodu