Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как Mockito Handle Harder -проверка не так, как неконтролируемые исключения


Как Mockito Handle Harder -проверка не так, как неконтролируемые исключения


Mockito обрабатывает проверенные и неконтролируемые исключения по -разному, в первую очередь из -за того, как Java рассматривает эти исключения и как Mockito предназначен для работы с подписями метода.

проверено исключения

- Определение: проверенные исключения - это исключения, которые проверяются во время компиляции. Они должны быть либо пойманы в блоке «Try-Catch», либо объявлены в подписи метода, используя ключевое слово `throws` [3].
- Mockito Randling: Mockito позволяет бросить проверенные исключения из фиктивного объекта, только если исключение объявлено в подписи метода. Если вы попытаетесь бросить проверенное исключение, которое не объявлено, Mockito выбросит «MockitoException» с сообщением, указывающим, что проверенное исключение является недействительным для этого метода [1] [2]. Например, если метод `void somemethod () бросает ioexception`, вы можете использовать Mockito, чтобы бросить` ioexception 'без проблем.

не контролировали исключения

- Определение: неконтролируемые исключения - это исключения, которые не проверяются во время компиляции. Обычно это исключения или ошибки времени выполнения, которые указывают ошибки программирования [3].
- Обработка Mockito: Mockito может легко справиться с неконтролируемыми исключениями без каких -либо ограничений. Вы можете использовать `thenthrow ()` или `dothrow ()` для имитации неконтролируемых исключений, таких как `runtimeexception` или` nullpointerexception` без необходимости их объявления в подписи метода [1] [2]. Это делает его простым для проверки обработки ошибок на предмет неожиданных условий.

обходные пути для проверенных исключений

Если вам нужно бросить проверенное исключение, которое не объявлено в подписи метода, вы можете использовать метод Mockito `doanswer ()`. Этот метод позволяет вам определять пользовательское поведение для макетного метода, включая бросание исключений, которые не объявляются в подписи метода [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-becked-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-between-thenthrowexception-class-and-henthnew-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