Mockito обробляє перевірені та неперевірені винятки по -різному, в першу чергу через те, як Java ставиться до цих винятків та як Mockito розроблений для роботи з підписами методу.
перевірили винятки
- Визначення: Перевірені винятки - це винятки, які перевіряються під час компіляції. Вони повинні бути або спіймані в блоці `Try-catch`, або оголошено в підписі методу за допомогою ключового слова` кидків [3].
- Mockito Priendling: Mockito дозволяє кидати перевірені винятки з макетного об'єкта лише в тому випадку, якщо виняток оголошений у підписі методу. Якщо ви спробуєте кинути перевірений виняток, який не оголошений, Mockito кине `mockitoException` з повідомленням, що вказує на те, що перевірений виняток є недійсним для цього методу [1] [2]. Наприклад, якщо метод `void somemethod () кидає iOException`, ви можете використовувати Mockito, щоб кинути` ioException` без проблем.
без перевірки винятків
- Визначення: Неперевірені винятки - це винятки, які не перевіряються під час компіляції. Зазвичай вони є винятками виконання або помилками, які вказують на помилки програмування [3].
- Mockito Running: Mockito може легко впоратися з неперевіреними винятками без будь -яких обмежень. Ви можете використовувати `thenthrow ()` або `dothrow ()`, щоб імітувати неперевірені винятки, такі як `runtimeexception` або` nullpointerexception`, не потребуючи їх оголошених у підписі методу [1] [2]. Це робить просто тестування обробки помилок для несподіваних умов.
Обхідні винятки для перевірених винятків
Якщо вам потрібно кинути перевірений виняток, який не оголошений у підписі методу, ви можете використовувати метод `doanswer ()` Mockito. Цей метод дозволяє визначити користувацьку поведінку для макетного методу, включаючи викидання винятків, які не оголошені в підписі методу [4]. Однак такий підхід вимагає більшої ручної обробки і, як правило, менш простий, ніж використання `thenthrow ()` або `dothrow ()`.
Підводячи підсумок, обробка Mockito з перевіреними винятками є більш обмежувальною, оскільки він дотримується перевірки часу на компіляцію Java, тоді як неперевірені винятки можуть бути викинуті вільно, що робить їх легшими у використанні в тестах.
Цитати:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this method
[2] https://www.toptal.com/java/a-guide-to-everyday-mockito
[3] https://rollbar.com/blog/how-to-handle-checked-unchecked-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-betweend-thentrowexception-class-and-thentrownew-excepti
[6] https://www.reddit.com/r/java/comments/1cct4iq/if_everyone_hates_checked_exceptions_wheres_the/
[7] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito
[8] https://www.youtube.com/watch?v=6-gj2w2ycmi
[9] https://www.browserstack.com/guide/mockito-throw-exception