1. 개요
이 짧은 예제에서는 Mockito를 사용하여 최종 클래스와 메서드를 Mocking 방법에 중점을 둘 것입니다.
Mockito 프레임워크에 초점을 맞춘 다른 기사(예: Mockito Verify , Mockito When/Then 및 Mockito의 Mock Methods )와 마찬가지로 아래에 표시된 MyList 클래스를 테스트 사례의 협력자로 사용합니다 .
이 사용방법(예제)에 대한 새 메서드를 추가합니다.
public class MyList extends AbstractList<String> {
final public int finalMethod() {
return 0;
}
}
또한 최종 하위 클래스 로 확장합니다 .
public final class FinalList extends MyList {
@Override
public int size() {
return 1;
}
}
2. 최종 메서드 및 클래스에 대한 Mockito 구성
최종 클래스와 메서드를 Mocking 위해 Mockito를 사용하기 전에 구성해야 합니다.
프로젝트의 src/test/resources/mockito-extensions 디렉토리 에 org.mockito.plugins.MockMaker 라는 텍스트 파일을 추가 하고 한 줄의 텍스트를 추가해야 합니다.
mock-maker-inline
Mockito는 구성 파일이 로드될 때 확장 디렉터리에서 구성 파일을 확인합니다. 이 파일을 사용하면 최종 메서드 및 클래스를 조롱할 수 있습니다.
3. 최종 메서드 모의
Mockito를 적절하게 구성하면 다른 것과 같이 최종 메서드를 모의할 수 있습니다 .
@Test
public void whenMockFinalMethodMockWorks() {
MyList myList = new MyList();
MyList mock = mock(MyList.class);
when(mock.finalMethod()).thenReturn(1);
assertThat(mock.finalMethod()).isNotEqualTo(myList.finalMethod());
}
구체적인 인스턴스와 MyList 모의 인스턴스를 생성하여 두 버전 의 finalMethod() 에서 반환 된 값을 비교 하고 모의가 호출되었는지 확인할 수 있습니다.
4. 최종 클래스 모의
최종 클래스를 Mocking 것은 다른 클래스를 Mocking 것만큼 쉽습니다 .
@Test
public void whenMockFinalClassMockWorks() {
FinalList finalList = new FinalList();
FinalList mock = mock(FinalList.class);
when(mock.size()).thenReturn(2);
assertThat(mock.size()).isNotEqualTo(finalList.size());
}
위의 테스트와 마찬가지로 최종 클래스의 구체적인 인스턴스와 모의 인스턴스를 만들고 메서드를 모의하고 모의 인스턴스가 다르게 동작하는지 확인합니다.
5. 결론
이 빠른 기사에서는 Mockito 확장을 사용하여 Mockito로 최종 클래스 및 메서드를 Mocking 방법을 다뤘습니다.
항상 그렇듯이 전체 예제는 GitHub 에서 찾을 수 있습니다 .