Při používání Mockito k zesměšňování výjimek může několik běžných úskalí ztěžovat vaše testy méně účinné nebo obtížnější udržovat. Zde jsou některé z těchto úskalí a jak se jim vyhnout:
1.. Over-Mocking **
Jedním z nejvýznamnějších úskalí je nadměrné úsměvy. K tomu dochází, když se vysmíváte příliš mnoha závislosti, což vede k testům, které jsou křehké a těžko udržovatelné. Přehrát se může způsobit, že testy se více zaměřují na zesměšňování než na skutečné chování testovacího systému. Abyste tomu zabránili, zaměřte se na zesměšňování pouze spolupracovníků, kteří mají netriviální chování, nebo ty, jejichž interakce chcete ověřit. Použijte skutečné případy pro jednoduchou spolupráci [3].2. neplatné výjimky **
Mockito zajišťuje, že vyvolaná výjimka je platná pro specifickou metodu strnovaného. Pokud se pokusíte vyhodit výjimku, která není v seznamu kontrolovaných výjimek metody, Mockito si stěžuje. Například, pokud metoda nevyhlásí `iOexception`, pokus o jeho vysmívání k vyhození„ ioexception “bude mít za následek chybu [1]. Vždy se ujistěte, že výjimka zesměšňované pro tuto metodu je platná.3. Používání `ThenThrow ()` s metodami Void **
`when (). ThenThrow ()` nelze použít s metodami void, protože neexistuje žádná návratová hodnota pro zesměšňování. Místo toho použijte `Dothrow ()` pro metody void. Nesprávné míchání těchto metod může vést k chybám [2].4. nedostatek specifičnosti **
Při zesměšňování výjimek je zásadní být konkrétní o tom, které výjimky testujete. Vyvarujte se přehnanému zaměření zaměřením na výjimky týkající se testovacího scénáře. To pomáhá udržovat testy zaměřené a udržovatelné [2] [8].5. Nesprávné zacházení s popravy **
Zajistěte, aby byl kód aplikace připraven správně zvládnout výjimky, i když je během testů zesměšňován. To zahrnuje testování logiky pro manipulaci s výjimkami, aby se zajistilo, že se chová podle očekávání [2].6. Použití smysluplných chybových zpráv **
Při zesměšňování výjimek zahrňte smysluplné zprávy, které pomáhají diagnostikovat problémy, pokud testy selhají. Tato praxe zvyšuje jasnost a účinnost vašich testů [2].7. Testování výjimek Logika **
Ujistěte se, že kód zpracovává výjimky podle očekávání. To zahrnuje ověření, že aplikace se chová správně, když jsou vyvolány výjimky, což je zásadní pro vytváření odolných aplikací [2].8. Resetování a čištění simulovačů **
Mockito poskytuje funkce jako `reset ()` a `clearInvocations ()` pro správu simulovačů. Tyto by však měly být používány střídmě. Resetování simulovaného by se mělo provádět pouze ve vzácných případech, například když je zesměšňování injikováno kontejnerem a nelze jej znovu vytvořit pro každý test. Čisticí vyvolání může být užitečné, pokud by se opětovné vytvoření zesměšňování vedlo k významné režii [1].Tím, že si můžete být vědomi těchto úskalí a dodržovat osvědčené postupy, můžete efektivně použít Mockito k vysmívání výjimek a zajistit, aby vaše testy byly robustní a udržovatelné.
Citace:[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browerstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/MockIto-Exception-when-requires-an-argument-which-has-to--method-call-on
[5] https://stackoverflow.com/questions/22540108/best-pactices-with-mockito
[6] https://stackoverflow.com/questions/52512548/Mock-Method-to-dot-Throw-an-enception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito