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 에서 찾을 수 있습니다 .

res – Junit (guide) (cat=Testing)