Vysmívání všeho v testech může vést k několika potenciálním úskalím, což může negativně ovlivnit účinnost a spolehlivost vaší testovací strategie. Zde jsou některé z klíčových otázek spojených s nadměrným zesměšňováním:
1. křehké testy a těsné spojení **
Když zesměšujete každou závislost, vaše testy se pečlivě spojí s podrobnostmi o implementaci testovacího kódu. To znamená, že i drobné změny v interních fungováních kódu mohou testy narušit, i když vnější chování zůstává nezměněno. Takové testy jsou křehké a vyžadují časté aktualizace, které mohou být časově náročné a frustrující [6] [9].
2. falešná důvěra a skryté chyby **
Nadměrné zesměšňování může vést k falešné důvěře ve spolehlivost kódu. Izolací komponent s falešnými činy byste mohli chybět problémy v reálném světě, které se projevují pouze tehdy, když všechny komponenty interagují společně. To může vést k tomu, že chyby byly objeveny spíše ve výrobě než při testování, což podkopává účel testování [1] [9].
3. Výzvy nadměrné komplexnosti a údržby **
Vytváření a udržování zesměšňování, zejména pro složité systémy, může být náročné a časově náročné. Jak se systém vyvíjí, možná je třeba často aktualizovat zesměšňování, aby odrážely změny v závislostech nebo chování, které mohou být těžkopádné a náchylné k chybám [9] [11].
4. Obtížnost při ověření chování v reálném světě **
Vysmívání všeho může ztěžovat ověření toho, jak se systém chová ve scénářích reálného světa. Integrační testy, které zahrnují méně falešných, jsou pro tento účel často vhodnější. Nadměrná spoléhání se na zesměšňování může vést k testům, které přesně neodrážejí interakce v reálném světě [9] [11].
5. Neefektivní využití zdrojů **
Nadměrné zesměšňování může vést k neefektivnímu využívání zdrojů. Konfigurace simulovačů může konzumovat více času než psaní skutečné testovací logiky, zejména v databázových nebo komplexních systémech [2] [11]. Tato neefektivnost může zpomalit proces vývoje a zvýšit náklady na testování.
6. překrývání s testy integrace **
Když testy jednotek pokrývají scénáře, které jsou také testovány integračními testy bez falešků, vyvolává otázky týkající se přidané hodnoty těmito testy jednotky. Integrační testy často poskytují komplexnější pokrytí chování systému bez nutnosti rozsáhlého zesměšňování [2] [7].
7. Potenciál pro nesprávné falešné chování **
Pokud si zesměšňování přesně napodobují chování skutečných objektů, které nahradí, mohou testy projít, i když by skutečný systém selhal. To může vést k falešnému pocitu bezpečnosti a zmeškané chyby [5] [9].
Stručně řečeno, zatímco zesměšňování může být užitečným nástrojem při testování, jeho nadměrné použití může vést k křehkým testům, falešné důvěře a neefektivnosti. Je zásadní používat zesměšňování uvážlivě a pokud je to možné, zvážit alternativy, jako jsou testy integrace.
Citace:[1] https://cs-syd.eu/posts/2021-10-22-why-mocking-a-a-bad-idea
[2] https://softwareEngineering.stackexchange.com/questions/454887/how-to-avoid-too-much-mocking-in-ninittests-in-atabase-heavy method
[3] https://ryanclements.dev/posts/you-probable-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/SHOULD-IMOMK- every-single-Dependences-in-Unit-testování
[5] https://softwareEngineering.stackexchange.com/questions/382087/how-exactly-sUld-Unit-tests-be-witteut-without-mocking-extensivně
[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_everything_everywhere_in/
[8] https://stackoverflow.com/questions/38181/when-spald-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/what-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/mocking-framework-gonside/