Mockito는 주로 Java가 이러한 예외를 처리하는 방법과 Mockito가 메소드 서명과 함께 작동하도록 설계된 방법으로 인해 점검 및 확인되지 않은 예외를 다르게 처리합니다.
확인 예외
- 정의 : 확인 된 예외는 컴파일 시간에 확인 된 예외입니다. 그것들은 'try-catch'블록에 잡히거나 'throws'키워드를 사용하여 메소드 서명에서 선언해야합니다 [3].
-Mockito 취급 : Mockito는 메소드 서명에서 예외가 선언 된 경우에만 모의 개체에서 확인 된 예외를 던져 넣을 수 있습니다. 선언되지 않은 점검 된 예외를 던지려고 시도하면 Mockito는 'MockitoException'을 던져서 확인 된 예외가 해당 방법에 대해 유효하지 않음을 나타내는 메시지와 함께``mockitoException ''을 던질 것입니다 [1] [2]. 예를 들어,`void somemethod ()가 ioexception '을 던지면 mockito를 사용하여 문제없이`ioexception`을 던질 수 있습니다.
확인되지 않은 예외
- 정의 : 확인되지 않은 예외는 컴파일 시간에 확인되지 않은 예외입니다. 일반적으로 프로그래밍 오류를 나타내는 런타임 예외 또는 오류입니다 [3].
-Mockito 처리 : Mockito는 제한없이 확인되지 않은 예외를 쉽게 처리 할 수 있습니다. `thenrow ()`또는`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-honle-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-bet-thenthrowexception-denthrownew-excrepti
[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