Mockito를 사용하여 모의 객체에서 확인 된 예외를 throw하십시오.
특정 메소드가 호출 될 때 조롱 된 객체 중 하나가 확인 된 예외를 발생 시키려고합니다. 나는 다음을 시도하고있다.
@Test(expectedExceptions = SomeException.class)
public void throwCheckedException() {
List<String> list = mock(List.class);
when(list.get(0)).thenThrow(new SomeException());
String test = list.get(0);
}
public class SomeException extends Exception {
}
그러나 다음과 같은 오류가 발생합니다.
org.testng.TestException:
Expected exception com.testing.MockitoCheckedExceptions$SomeException but got org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!
Invalid: com.testing.MockitoCheckedExceptions$SomeException
Mockito 문서를 보면 Mockito를 사용 RuntimeException
하여 모의 객체에서 확인 된 예외를 던질 수 없습니까?
Java API 목록을 확인하십시오 . get (int) 메소드는 RuntimeException을 확장하는 IndexOutOfBoundException 만 발생 시키도록 선언됩니다. Mockito에게 특정 메소드 호출에 의해 던져 질 수없는 예외를 던지도록 지시하려고합니다.
더 명확히하기 위해. List 인터페이스는 get () 메소드에서 확인 된 예외를 제공하지 않으므로 Mockito가 실패합니다. 모의 List를 만들 때 Mockito는 List.class의 정의를 사용하여 모의를 만듭니다. 로 지정하는 동작이 when(list.get(0)).thenThrow(new SomeException())
List.class의 메소드 서명과 일치하지 않으므로 Mockito가 실패합니다. 정말로 이것을 원한다면 , API가 유일하게 유효한 예외 임을 던지기 때문에 Mockito가 던지 new RuntimeException()
거나 더 나은 던지기를하십시오 new ArrayIndexOutOfBoundsException()
.
해결 방법은 방법을 사용하는 willAnswer()
것입니다.
예를 들어 다음은 다음을 사용하여 작동합니다 (그리고 던지지 MockitoException
않지만 실제로 Exception
필요한 경우 체크 를 던집니다 ) BDDMockito
.
given(someObj.someMethod(stringArg1)).willAnswer( invocation -> { throw new Exception("abc msg"); });
평범한 Mockito와 동등한 doAnswer
방법으로
참고 URL : https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
'programing tip' 카테고리의 다른 글
Java에서 링크 된 목록 데이터 구조를 작성하는 방법 (0) | 2020.06.27 |
---|---|
파이썬 : 출력 문자열 형식, 오른쪽 정렬 (0) | 2020.06.27 |
Windows Form (C #)에서 애니메이션 GIF를 표시하는 방법 (0) | 2020.06.26 |
WebGL 및 three.js 학습 (0) | 2020.06.26 |
메시지와 함께 인덱싱 정지 : 일괄 업데이트로 인해 인덱싱이 일시 중지되었습니다 (0) | 2020.06.26 |