Використовуючи Mockito для знущання над винятками, кілька поширених підводних каменів можуть зробити ваші тести менш ефективними або складніше підтримувати. Ось деякі з цих підводних каменів і як їх уникнути:
1. Надмірна **
Один з найбільш значущих підводних каменів-надмірно. Це відбувається, коли ти знущаєшся над занадто великою кількістю залежностей, що призводить до тестів, які є крихкими та важкими для підтримки. Надмірне залучення може призвести до того, що тести більше зосереджуються на макетах, ніж на фактичній поведінці тестової системи. Щоб уникнути цього, зосередьтеся на змішуванні лише співробітників, які мають нетривіальну поведінку, або тих, чиї взаємодії ви хочете перевірити. Використовуйте реальні екземпляри для простих співпраць [3].2. Недійні винятки **
Mockito гарантує, що виняток викидання є дійсним для специфічного методу Stupped. Якщо ви спробуєте кинути виняток, який не є у списку перевірених винятків методу, Mockito поскаржиться. Наприклад, якщо метод не оголошує `iOException`, намагання знущатися над ним кинути` iOException`, це призведе до помилки [1]. Завжди переконайтесь, що знущається виняток є дійсним для методу.3. Використання `thenthrow ()` з недійсними методами **
`Коли (). Thenthrow ()` не може використовуватися з недійсними методами, оскільки не існує зворотного значення для знущання. Натомість використовуйте `dothrow ()` для недійсних методів. Неправильно змішування цих методів може призвести до помилок [2].4. Відсутність специфічності **
При знущанні над винятками важливо бути специфічним щодо винятків, які ви тестуєте. Уникайте надмірного залучення, зосереджуючись на винятках, що стосуються сценарію тесту. Це допомагає тримати тести зосередженими та реконструйованими [2] [8].5. Неправильне поводження з виконанням **
Переконайтесь, що код програми готовий правильно обробляти винятки, навіть при знущанні під час тестів. Це включає тестування логіки для обробки винятків, щоб переконатися, що вона поводиться так, як очікувалося [2].6. Використання змістовних повідомлень про помилки **
При знущанні над винятками включіть змістовні повідомлення, щоб допомогти діагностувати проблеми, якщо тести провалюються. Ця практика підвищує ясність та ефективність ваших тестів [2].7. ТЕСТУВАТИ ЛОГІКУВАННЯ ВІДКЛЮЧЕННЯ **
Переконайтесь, що код обробляє винятки, як очікувалося. Це передбачає перевірку того, що програма поводиться правильно, коли виняті винятки, що має вирішальне значення для створення стійких додатків [2].8. Скидання та очищення макетів **
Mockito надає такі функції, як `reset ()` та `clearInVocations ()` для управління макетами. Однак їх слід застосовувати щедро. Скидання макету слід робити лише в рідкісних випадках, наприклад, коли макет вводиться контейнером і не може бути відтворений для кожного тесту. Очищення викликів може бути корисним, якщо відтворення макету призведе до значних накладних витрат [1].Зважаючи на ці підводні камені та дотримуючись найкращих практик, ви можете ефективно використовувати Mackito для знущання над винятками та забезпечення того, що ваші тести є надійними та реконструкцією.
Цитати:[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockitoexception-when-requires-an-argument-which-has-to-a-a-method-call-on
[5] https://stackoverflow.com/questions/22540108/best-practices-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-method-o-do-not-throw-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nuls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito