1. 개요
이 짧은 튜토리얼에서는 Mockito로 void 메서드 를 조롱하는 데 중점을 둡니다.
Mockito 프레임 워크에 초점을 맞춘 다른 기사 (예 : Mockito Verify , Mockito When / Then , Mockito 's Mock Methods ) 와 마찬가지로 아래 표시된 MyList 클래스는 테스트 케이스에서 공동 작업자로 사용됩니다.
이 자습서에 대한 새로운 방법을 추가합니다.
public class MyList extends AbstractList<String> {
@Override
public void add(int index, String element) {
// no-op
}
}
2. 간단한 조롱 및 검증
공허 방법은 Mockito의 사용할 수 있습니다 doNothing () , doThrow () , 및 doAnswer () 메소드, 조롱을하고 직관적 확인 :
@Test
public void whenAddCalledVerified() {
MyList myList = mock(MyList.class);
doNothing().when(myList).add(isA(Integer.class), isA(String.class));
myList.add(0, "");
verify(myList, times(1)).add(0, "");
}
그러나 doNothing () 은 void 메서드에 대한 Mockito의 기본 동작입니다 .
이 버전의 whenAddCalledVerified () 은 위와 동일한 작업을 수행합니다.
@Test
public void whenAddCalledVerified() {
MyList myList = mock(MyList.class);
myList(0, "");
verify(myList, times(1)).add(0, "");
}
DoThrow () 는 예외를 생성합니다.
@Test(expected = Exception.class)
public void givenNull_AddThrows() {
MyList myList = mock(MyList.class);
doThrow().when(myList).add(isA(Integer.class), isNull());
myList.add(0, null);
}
아래에서 doAnswer ()를 다룰 것 입니다.
3. 인수 캡처
doNothing () 으로 기본 동작을 재정의하는 한 가지 이유 는 인수를 캡처하기위한 것입니다.
위의 예에서는 verify () 메서드를 사용하여 add ()에 전달 된 인수를 확인했습니다 .
그러나 우리는 논쟁을 포착하고 더 많은 것을해야 할 수도 있습니다.
이 경우 위에서했던 것처럼 doNothing () 을 사용 하지만 ArgumentCaptor를 사용합니다 .
@Test
public void whenAddCalledValueCaptured() {
MyList myList = mock(MyList.class);
ArgumentCaptor<String> valueCapture = ArgumentCaptor.forClass(String.class);
doNothing().when(myList).add(any(Integer.class), valueCapture.capture());
myList.add(0, "captured");
assertEquals("captured", valueCapture.getValue());
}
4. 무효 전화 받기
메서드는 단순히 값을 추가하거나 설정하는 것보다 더 복잡한 동작을 수행 할 수 있습니다.
이러한 상황에서는 Mockito의 답변 을 사용 하여 필요한 동작을 추가 할 수 있습니다 .
@Test
public void whenAddCalledAnswered() {
MyList myList = mock(MyList.class);
doAnswer(invocation -> {
Object arg0 = invocation.getArgument(0);
Object arg1 = invocation.getArgument(1);
assertEquals(3, arg0);
assertEquals("answer me", arg1);
return null;
}).when(myList).add(any(Integer.class), any(String.class));
myList.add(3, "answer me");
}
Mockito의 Java 8 Features에 설명 된 대로 , 우리 는 add ()에 대한 사용자 정의 동작을 정의하기 위해 Answer 와 함께 람다를 사용합니다 .
5. 부분 조롱
부분 모의도 옵션입니다. Mockito의 doCallRealMethod () 는 void 메서드에 사용할 수 있습니다 .
@Test
public void whenAddCalledRealMethodCalled() {
MyList myList = mock(MyList.class);
doCallRealMethod().when(myList).add(any(Integer.class), any(String.class));
myList.add(1, "real");
verify(myList, times(1)).add(1, "real");
}
이렇게하면 실제 메서드를 호출하고 동시에 확인할 수 있습니다.
6. 결론
이 간략한 기사에서는 Mockito로 테스트 할 때 void 메서드 에 접근하는 네 가지 방법을 다뤘습니다.
항상 그렇듯이이 GitHub 프로젝트 에서 예제를 사용할 수 있습니다 .