Mockito의 예외를 조롱하고 주장하는 방법?
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"));
}
다음과 같이 예외가 발생하도록하십시오.
when(obj.someMethod()).thenThrow(new AnException());
테스트에서 예외가 발생했다고 주장하여 문제가 발생했는지 확인하십시오.
@Test(expected = AnException.class)
또는 일반적인 모의 것으로 :
verify(obj).someMethod();
테스트가 중간 코드가 예외를 처리하는 경우 증명되는 경우 후자의 옵션이 필요합니다 (예 : 테스트 메소드에서 예외가 발생하지 않음).
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();
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());
}
여기에서 샘플을 찾으십시오. 예외 junit 주장
mockito와 관련이 예외를 주장 할 수 있습니다. 예외가 발생하는 경우 발생하는 비용이 발생하는 것으로 간주됩니다.
또는 클래스 생성자에서 예외가 발생하는 경우 :
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void myTest() {
exception.expect(MyException.class);
CustomClass myClass= mock(CustomClass.class);
doThrow(new MyException("constructor failed")).when(myClass);
}
예외 메시지로 확인 :
try {
MyAgent.getNameByNode("d");
} catch (Exception e) {
Assert.assertEquals("Failed to fetch data.", e.getMessage());
}
참고 URL : https://stackoverflow.com/questions/16243580/mockito-how-to-mock-and-assert-a-thrown-exception
'IT' 카테고리의 다른 글
hashCode는 무엇에 사용인가? (0) | 2020.07.21 |
---|---|
Genymotion, "VirtualBox 엔진을로드 할 수 없습니다." (0) | 2020.07.21 |
jquery에서 배경색을 설정하는 방법 (0) | 2020.07.21 |
UINavigationBar에 버튼을 추가하는 방법? (0) | 2020.07.21 |
클릭 후 알림 제거 (0) | 2020.07.21 |