IT

Mockito의 예외를 조롱하고 주장하는 방법?

lottoking 2020. 7. 21. 07:43
반응형

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

반응형