모키토 던져진 예외를 어떻게 조롱하고 주장할 것인가?
나는 쓰레기 시험에서 모키토를 사용하고 있다.예외를 발생시킨 다음 (일반적인 사이비 코드)가 있다고 주장하는 방법
두 번째 질문에 먼저 답하기 위해서입니다.JUnit 4를 사용하는 경우 다음과 같이 테스트에 주석을 달 수 있다.
@Test(expected=MyException.class)
예외가 발생했다고 주장할 수 있다.그리고 모키토와 함께 예외를 "mock"하려면,
when(myMock.doSomething()).thenThrow(new MyException());
BDD Style Solution(Java 8로 업데이트됨)
모키토만으로는 예외 처리를 위한 최선의 해결책이 아니므로, 캐치-예외를 포함한 모키토를 사용하십시오.
모키토 + 캐치-예외 + 어설션J
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
샘플코드
종속성
예외 메시지도 테스트하려면 JUnit의 예상됨을 사용하십시오.Mockito의 예외:
@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년 06/19에 대한 답변 업데이트(Java 8을 사용하는 경우)
그냥 단언만 사용해.
administj-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();
테스트가 중간 코드가 예외를 처리한다는 것을 입증하도록 설계된 경우(즉, 테스트 방법에서 예외가 발생하지 않음) 후자의 옵션이 필요하다.
모키토의 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);
}
모키토를 사용하면 예외를 발생시킬 수 있다.
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());
}
여기에서 샘플 찾기: 예외 준수 주장
내 생각엔 이게 너에게 도움이 될 것 같아.
어설스트스트로우(someException.class, ()-> mockedServiceReference.someMethod(param1,parme2,..);
또는 클래스의 생성자에서 제외되는 경우:
@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
'Programing' 카테고리의 다른 글
ZoneOffset의 차이점은 무엇인가?UTC 및 ZoneId.of("UTC")? (0) | 2022.05.06 |
---|---|
Vuex 데이터를 사후 대응적으로 만들기 (0) | 2022.05.06 |
C에 철자 배열을 연결하다 (0) | 2022.05.06 |
VueJS와 케이크를 통합하는 모범 사례PHP 3 (0) | 2022.05.06 |
Vuejs 라우터, JavaScript 코드의 조건부 로딩 (0) | 2022.05.05 |