Po kilku latach programowania i pracy nad projektami udzielę odpowiedzi na moje własne pytanie.
Tak, powinieneś napisać testy jednostkowe. Testy od końca do końca są trudniejsze do napisania i kruche, zwłaszcza jeśli polegają na składnikach interfejsu użytkownika.
Jeśli używasz frameworka, takiego jak Django lub Rails (lub własne niestandardowe klasy), powinieneś mieć klasę formularza, która będzie obsługiwać sprawdzanie poprawności formularza. Będziesz także mieć klasy widoku, które wyświetlają renderowane szablony oraz formularz i obsługują żądania GET i POST.
W ramach testu od końca do końca:
- pobierz adres URL
- wypełnij formularz prawidłowymi danymi
- opublikuj formularz na adres URL
- sprawdź, czy baza danych została zaktualizowana lub czy jakieś działanie zostało wykonane w wyniku prawidłowego formularza
Testujesz dużo kodu i zasięg będzie całkiem dobry, ale testujesz szczęśliwą ścieżkę tylko wtedy, gdy wszystko pójdzie dobrze. W jaki sposób upewniasz się, że formularz ma odpowiednią weryfikację? Co jeśli ten formularz jest używany na wielu stronach? Czy piszesz jeszcze jeden test od końca do końca?
Spróbujmy jeszcze raz z testami jednostkowymi:
- przetestuj metodę GET widoku
- przetestuj metodę POST widoku za pomocą fałszywego / próbnego formularza
- przetestuj formularz z poprawnymi danymi
- przetestuj formularz z nieprawidłowymi danymi
- przetestuj skutki uboczne formularza
Korzystając z testów jednostkowych, testujesz mniejsze fragmenty kodu, a testy są specyficzne i łatwiejsze do napisania. Połączenie tego z TDD (Test Driven Development) daje kod o wyższej jakości.
Łatwość pisania testów jednostkowych nie powinna zostać odrzucona, ponieważ jeśli pracujesz nad projektem, który nie ma testów automatycznych, musisz gdzieś zacząć. Rozpoczęcie od testów jednostkowych jest łatwiejsze i szybsze i pozwala natychmiast rozpocząć testowanie pod kątem błędów, a nie tylko szczęśliwej ścieżki.
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.
- Dotyczy to również testów jednostkowych. Wydaje mi się, że kompleksowe testy są wykorzystywane jako wymówka dla nie pisania testów jednostkowych.