Programing

모키토 던져진 예외를 어떻게 조롱하고 주장할 것인가?

c10106 2022. 5. 6. 19:22
반응형

모키토 던져진 예외를 어떻게 조롱하고 주장할 것인가?

나는 쓰레기 시험에서 모키토를 사용하고 있다.예외를 발생시킨 다음 (일반적인 사이비 코드)가 있다고 주장하는 방법

두 번째 질문에 먼저 답하기 위해서입니다.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

반응형