Testy automatyczne dzielimy na jednostkowe (unit), integracyjne (integration) oraz end-to-end (end-to-end, E2E), aby kompleksowo pokryć weryfikację systemu na różnych poziomach.
Historia pytania: Ta klasyfikacja pojawiła się z powodu potrzeby testowania aplikacji zarówno w częściach, jak i w całości. W związku z tym wyróżniamy warstwy testowania:
Problem: Błędy często występują nie tylko w logice pojedynczej metody, ale także na styku komponentów lub podczas "rzeczywistego" uruchamiania całego systemu z zewnętrznymi usługami. Jeśli wszystko zrzuci się do jednej puli, trudno szybko zlokalizować błąd lub zrozumieć, gdzie dokładnie on się pojawił.
Rozwiązanie:
Rozróżnianie typów testów jest kluczowe, aby:
Kluczowe cechy:
Czy można uznać testy integracyjne za "większe" testy jednostkowe?
Nie, testy integracyjne sprawdzają działanie kilku komponentów razem, a nie tylko pojedyncze funkcje. Przy tym nie zawsze można używać mocków — rzeczywiste usługi komunikują się ze sobą.
Czy wszystkie testy powinny być skrajne (E2E)?
Nie, to drogie i skomplikowane podejście. E2E są potrzebne tylko dla krytycznych scenariuszy użytkowników, większość logiki pokrywają inne testy.
Czy testy jednostkowe są zawsze szybkie?
Nie zawsze. Zdarza się, że nie można izolować kodu, lub metoda zależy od skomplikowanych zasobów zewnętrznych. W takim przypadku test przestaje być jednostkowy.
W firmie pokryto główną funkcjonalność tylko testami E2E — każda poprawka była sprawdzana w nocy, testy padały niestabilnie, błędy były odkrywane późno.
Zalety:
Wady:
Zespół zbudował piramidę testową: dół — testy jednostkowe, środek — testy integracyjne, góra — tylko najważniejsze E2E.
Zalety:
Wady: