이 짧은 튜토리얼에서는 Mockito를 사용하여 final 클래스와 메소드를 모의하는 방법에 중점을 둘 것입니다.
Mockito 프레임워크(예: Mockito Verify, Mockito When/Then 및 Mockito의 Mock 메서드)에 초점을 맞춘 다른 기사와 마찬가지로 아래 표시된 MyList 클래스를 테스트 사례의 공동 작업자로 사용합니다.
이 튜토리얼에 새로운 메소드를 추가하겠습니다:
public class MyList extends AbstractList<String> {
final public int finalMethod() {
return 0;
}
}
그리고 우리는 이를 fianl 하위 클래스로 확장할 것입니다:
public final class FinalList extends MyList {
@Override
public int size() {
return 1;
}
}
Mockito를 적절하게 구성한 후에는 다른 메소드와 마찬가지로 최종 메소드를 모의할 수 있습니다.
@Test
public void whenMockFinalMethod_thenMockWorks() {
MyList myList = new MyList();
MyList mock = mock(MyList.class);
when(mock.finalMethod()).thenReturn(1);
assertThat(mock.finalMethod()).isNotZero();
}
MyList의 구체적인 인스턴스와 모의 인스턴스를 생성함으로써 두 버전의 finalMethod()에서 반환된 값을 비교하고 모의 인스턴스가 호출되었는지 확인할 수 있습니다.
final 클래스를 mocking하는 것은 다른 클래스를 mocking하는 것만큼 쉽습니다.
@Test
public void whenMockFinalClass_thenMockWorks() {
FinalList mock = mock(FinalList.class);
when(mock.size()).thenReturn(2);
assertThat(mock.size()).isNotEqualTo(1);
}
위의 테스트와 유사하게 최종 클래스의 구체적인 인스턴스와 모의 인스턴스를 생성하고 메서드를 모의하고 모의 인스턴스가 다르게 동작하는지 확인합니다.