junit 테스트에서 mockito를 사용하고 있습니다. 예외를 발생시킨 다음 예외가 발생했다고 주장하는 방법 (일반적인 의사 코드)
답변
BDD 스타일 솔루션 (Java 8로 업데이트)
Mockito 만으로는 예외 처리를위한 최상의 솔루션이 아닙니다. Catch-Exception 과 함께 Mockito 를 사용 하십시오.
모키 토 + 캐치 예외 + AssertJ
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
샘플 코드
의존성
답변
두 번째 질문에 먼저 답하십시오. JUnit 4를 사용하는 경우 테스트에 주석을 달 수 있습니다
@Test(expected=MyException.class)
예외가 발생했다고 주장합니다. 그리고 mockito로 예외를 “모의”하려면
when(myMock.doSomething()).thenThrow(new MyException());
답변
예외 메시지도 테스트하려면 Mockito와 함께 JUnit의 ExpectedException을 사용할 수 있습니다.
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testExceptionMessage() throws Exception {
expectedException.expect(AnyException.class);
expectedException.expectMessage("The expected message");
given(foo.bar()).willThrow(new AnyException("The expected message"));
}
답변
2015 년 6 월 19 일에 대한 답변이 업데이트되었습니다 (Java 8을 사용하는 경우).
그냥 assertj를 사용하십시오
assertj-core-3.0.0 + Java 8 Lambdas 사용
@Test
public void shouldThrowIllegalArgumentExceptionWhenPassingBadArg() {
assertThatThrownBy(() -> myService.sumTingWong("badArg"))
.isInstanceOf(IllegalArgumentException.class);
}
참조 : http://blog.codeleak.pl/2015/04/junit-testing-exceptions-with-java-8.html
답변
JUnit 4 및 Mockito 1.10.x를 사용하는 경우 다음과 같이 테스트 방법에 주석을 답니다.
@Test(expected = AnyException.class)
원하는 예외 사용을 던지기 위해 :
Mockito.doThrow(new AnyException()).when(obj).callAnyMethod();
답변
다음과 같이 예외가 발생하도록하십시오.
when(obj.someMethod()).thenThrow(new AnException());
테스트에서 이러한 예외가 발생한다고 주장하여 문제가 발생했는지 확인하십시오.
@Test(expected = AnException.class)
또는 일반적인 모의 검증으로 :
verify(obj).someMethod();
테스트가 중간 코드가 예외를 처리하도록 증명하도록 설계된 경우 후자의 옵션이 필요합니다 (예 : 테스트 메소드에서 예외가 발생하지 않음).
답변
Mockito의 doThrow를 사용 하고 원하는 예외를 포착하여 나중에 발생하도록합니다.
@Test
public void fooShouldThrowMyException() {
// given
val myClass = new MyClass();
val arg = mock(MyArgument.class);
doThrow(MyException.class).when(arg).argMethod(any());
Exception exception = null;
// when
try {
myClass.foo(arg);
} catch (MyException t) {
exception = t;
}
// then
assertNotNull(exception);
}