CodeGym/Java Course/모듈 3/개체의 특정 동작 표시

개체의 특정 동작 표시

사용 가능

5.1 verify() 메서드

가상 개체를 만드는 것 외에도 테스트 중인 클래스가 올바른 개체의 올바른 메서드를 호출하는지 확인하는 또 다른 흥미로운 작업이 자주 발생합니다. 또한 올바른 매개 변수 등을 사용하여 필요한 횟수를 호출했습니다.

이를 위해 Mockito에는 몇 가지 마법이 있습니다. 메서드 계열입니다 Mockito.verify(…). 메서드 호출 확인을 지정하는 일반적인 규칙은 다음과 같습니다.

Mockito.verify(an object).method name(parameter);

예:

@ExtendWith(MockitoExtension.class)
class VerifyTest {
    @Mock
    List<String> mockList;

    @Test
    public void whenMockAnnotation() {
        //method call
        String name = mockList.get(10);

        // check if the method was called
        Mockito.verify(mockList).get(10);
    }
}

메서드를 호출하는 동안 객체에서 매개변수 10을 가진 메서드를 호출해야 한다는 verify()규칙을 설정합니다 .mockitoListget()

5.2 호출 횟수를 확인하는 verify() 메서드

때때로 더 복잡한 검증 시나리오가 있습니다. 예를 들어 메소드가 호출되었다는 사실뿐만 아니라 예를 들어 3번 호출되었는지 확인해야 합니다. 또는 주기에서 사용자로부터 호출되었으므로 N번 호출되어야 합니다.

이것이 가능한지 묻지 않고 즉시 질문합니다. 그러한 규칙을 작성하는 방법은 무엇입니까? 그리고 다시 Mockito는 우리를 실망시키지 않습니다. 규칙은 다음과 같이 지정할 수 있습니다.

Mockito.verify(an object,quantity).method name(parameter);

중요한! Quantity는 type이 아니라 int다양한 패턴을 정의할 수 있는 특별한 객체입니다. 방법의 다른 버전을 기억하십니까 any()? 여기에서도 동일합니다. 다양한 시나리오를 설정할 수 있는 특별한 방법이 있습니다.

방법 설명
1 절대() 이 메서드는 절대 호출하면 안 됩니다.
2 회(n) n번
최소(n) n회 이상
4 atLeastOnce() 1회 이상
5 기껏해야(n) n회 이하
6 오직() 이 메서드에 대한 호출은 한 번만 있어야 합니다.

예:

String name1 = mockList.get(1);  //method call
String name2 = mockList.get(2);  //method call
String name3 = mockList.get(3);  //method call

//check that the get() method was called 3 times
Mockito.verify(mockList, times(3)).get(anyInt());

지정된 메서드 호출 외에 개체에 대한 다른 참조가 만들어지지 않도록 요구할 수도 있습니다 . 이에 대한 규칙이 있습니다.

Mockito.verifyNoMoreInteractions(an object);

5.3 메소드 호출 순서

이전 규칙은 어떤 식으로든 메서드 호출 순서를 규제하지 않았습니다. 규칙은 충족되어야만 하고 그게 전부입니다. 그러나 메서드 호출 순서가 중요한 상황이 있으며 Mockito에는 이에 대한 솔루션도 있습니다.

메서드 호출의 엄격한 순서는 특수 개체를 사용하여 지정할 수 있습니다 InOrder. 먼저 생성해야 합니다.

InOrder inOrder = Mockito.inOrder(an object);

그런 다음 메서드를 호출하여 규칙을 추가합니다 verify().

예:

List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();

InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();

5.4 Mockito에서 예외 확인하기

예외가 발생했다는 사실은 조금 다르게 확인됩니다. 이렇게 하려면 다음 방법을 사용하십시오 assertThrows(). 이러한 검사의 일반적인 형식은 다음과 같습니다.

Assertions.assertThrows(exception.class, () -> an object.methodname());

복잡한 것은 없습니다.

예:

@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        //set the behavior of the method (needed for demonstration purposes only)
        Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);

        //check if an IllegalStateException will be thrown when calling the size method
        assertThrows(IllegalStateException.class, () -> mockList.size());
    }
}
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다