Knotowanie wszystkiego w testach może prowadzić do kilku potencjalnych pułapek, które mogą negatywnie wpłynąć na skuteczność i niezawodność strategii testowania. Oto niektóre z kluczowych problemów związanych z nadmiernym kpiną:
1. Kruche testy i ciasne sprzężenie **
Podczas kpiny z każdej zależności twoje testy stają się ściśle sprzężone ze szczegółami implementacji testowanego kodu. Oznacza to, że nawet niewielkie zmiany w wewnętrznym działaniu kodu mogą przełamać testy, nawet jeśli zachowanie zewnętrzne pozostaje niezmienione. Takie testy są kruche i wymagają częstych aktualizacji, które mogą być czasochłonne i frustrujące [6] [9].
2. Fałszywe zaufanie i ukryte błędy **
Nadmierne kpiny może prowadzić do fałszywego zaufania do niezawodności kodu. Izolując komponenty z próbami, możesz przegapić rzeczywiste problemy, które objawiają się tylko wtedy, gdy wszystkie komponenty oddziałują razem. Może to spowodować odkrycie błędów w produkcji, a nie podczas testowania, podważając cel testowania [1] [9].
3. Wyzwania nadmierne kompleksowość i konserwacja **
Tworzenie i utrzymanie próbek, szczególnie w przypadku złożonych systemów, może być trudne i czasochłonne. W miarę ewolucji systemu próby mogą wymagać często aktualizacji w celu odzwierciedlenia zmian zależności lub zachowania, które mogą być uciążliwe i podatne na błędy [9] [11].
4. Trudność w weryfikacji zachowania w świecie rzeczywistym **
Zakadanie wszystkiego może utrudnić sprawdzenie, w jaki sposób system zachowuje się w scenariuszach w świecie rzeczywistym. Testy integracyjne, które obejmują mniej prób, często lepiej nadają się do tego celu. Nadmierne poleganie na próbach może prowadzić do testów, które dokładnie nie odzwierciedlają interakcji w świecie rzeczywistym [9] [11].
5. Nieefektywne wykorzystanie zasobów **
Nadmierne kpiny może prowadzić do nieefektywnego wykorzystania zasobów. Konfigurowanie próbnych może spożywać więcej czasu niż pisanie faktycznej logiki testowej, szczególnie w systemach ciężkich lub złożonych baz danych [2] [11]. Ta nieefektywność może spowolnić proces rozwoju i zwiększyć koszty testowania.
6. Nakładaj się z testami integracji **
Gdy testy jednostkowe obejmują scenariusze, które są również testowane za pomocą testów integracji bez próbnych, rodzi pytania dotyczące wartości dodanej przez te testy jednostkowe. Testy integracji często zapewniają bardziej kompleksowe pokrycie zachowania systemu bez potrzeby rozległej kpiny [2] [7].
7. Potencjał niepoprawnego kpiny **
Jeśli kpiny nie naśladują dokładnie zachowania rzeczywistych obiektów, które wymieniają, testy mogą minąć, nawet gdy rzeczywisty system się nie powiedzie. Może to prowadzić do fałszywego poczucia bezpieczeństwa i pominiętych błędów [5] [9].
Podsumowując, podczas gdy kpiny może być przydatnym narzędziem w testowaniu, nadużywanie go może prowadzić do kruchego testy, fałszywego zaufania i nieefektywności. Ważne jest, aby rozsądnie używać kpiny i rozważyć alternatywy takie jak testy integracyjne, jeśli to możliwe.
Cytaty:[1] https://cs-sid.eu/posts/2021-10-22-why-mocking-is-a-bad-idea
[2] https://softwareengineering.stackexchange.com/questions/454887/how-to-avoid-too-much-mocking-in-unit-tests-in-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probabally-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-dependency-in-unit-testing
[5] https://softwareengineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests-be-written-without-gococking-extensive
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_mocking_everhing_everywhere_in/
[8] https://stackoverflow.com/questions/38181/when-should-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/at-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/mocking-framework-downside/