Mock Final Classes and Methods with Mockito

Dev.Hammy·2024년 4월 1일

Mockito_Tutorial

목록 보기
9/21

1. Overview

이 짧은 튜토리얼에서는 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;
    }
}

2. Mock a Final Method

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()에서 반환된 값을 비교하고 모의 인스턴스가 호출되었는지 확인할 수 있습니다.

3. Mock a Final Class

final 클래스를 mocking하는 것은 다른 클래스를 mocking하는 것만큼 쉽습니다.

@Test
public void whenMockFinalClass_thenMockWorks() {

    FinalList mock = mock(FinalList.class);
    when(mock.size()).thenReturn(2);

    assertThat(mock.size()).isNotEqualTo(1);
}

위의 테스트와 유사하게 최종 클래스의 구체적인 인스턴스와 모의 인스턴스를 생성하고 메서드를 모의하고 모의 인스턴스가 다르게 동작하는지 확인합니다.

0개의 댓글