답변:
Mockito 만으로는 예외 처리를위한 최상의 솔루션이 아닙니다. Catch-Exception 과 함께 Mockito 를 사용 하십시오.
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
caughtException
?
com.googlecode.catchexception.CatchException.caughtException;
두 번째 질문에 먼저 답하십시오. 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"));
}
given()
어디에서 왔습니까?
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
다음과 같이 예외가 발생하도록하십시오.
when(obj.someMethod()).thenThrow(new AnException());
테스트에서 이러한 예외가 발생한다고 주장하여 문제가 발생했는지 확인하십시오.
@Test(expected = AnException.class)
또는 일반적인 모의 검증으로 :
verify(obj).someMethod();
테스트가 중간 코드가 예외를 처리하도록 증명하도록 설계된 경우 후자의 옵션이 필요합니다 (예 : 테스트 메소드에서 예외가 발생하지 않음).
verify
전화가 예외를 주장 합니까 ?
when
절이 정확하다면 예외를 던져야 합니다.
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);
}
mockito를 사용하면 예외가 발생할 수 있습니다.
when(testingClassObj.testSomeMethod).thenThrow(new CustomException());
Junit5를 사용 하면 테스트 메소드 가 호출 될 때 예외가 발생 하는지 여부 를 주장 할 수 있습니다 .
@Test
@DisplayName("Test assert exception")
void testCustomException(TestInfo testInfo) {
final ExpectCustomException expectEx = new ExpectCustomException();
InvalidParameterCountException exception = assertThrows(InvalidParameterCountException.class, () -> {
expectEx.constructErrorMessage("sample ","error");
});
assertEquals("Invalid parametercount: expected=3, passed=2", exception.getMessage());
}
여기에서 샘플을 찾으십시오. assert exception junit
예외 메시지로 확인 :
try {
MyAgent.getNameByNode("d");
} catch (Exception e) {
Assert.assertEquals("Failed to fetch data.", e.getMessage());
}