[java] Mockito를 사용하여 메소드 호출 시 원하는 결과를 순차적으로 반환하는 방법은?

아래의 예제 코드를 통해 설명하겠습니다.

import static org.mockito.Mockito.*;

import java.util.List;

public class ExampleTest {
    
    @Test
    public void testMethod() {
        List<String> mockedList = mock(List.class);
        
        when(mockedList.size()).thenReturn(1).thenReturn(2).thenReturn(3);
        
        System.out.println(mockedList.size());     // 출력: 1
        System.out.println(mockedList.size());     // 출력: 2
        System.out.println(mockedList.size());     // 출력: 3
        System.out.println(mockedList.size());     // 출력: 3
    }
}

위의 코드에서는 mockedList라는 List 객체를 생성하고, size() 메소드를 호출할 때마다 결과를 순차적으로 반환하도록 설정하였습니다. thenReturn() 메소드에 반환되길 원하는 값을 순차적으로 지정하면 됩니다.

위의 예제에서는 size() 메소드를 첫번째 호출 시에는 1을 반환하고, 두번째 호출 시에는 2를 반환하도록 설정하였습니다. 세번째 호출 시에는 3을 반환하도록 설정하였습니다. 네번째 호출 시에는 설정된 값 중 마지막 값인 3을 계속 반환하게 됩니다.

따라서 위의 코드를 실행하면 총 4번의 size() 메소드 호출이 있지만, 결과는 1, 2, 3, 3이 순차적으로 출력됩니다.

thenReturn() 메소드는 메소드의 반환 타입에 맞는 값을 지정하면 됩니다. 여러 번 호출해야 하는 경우에는 연속해서 thenReturn() 메소드를 호출하면 됩니다.

이와 같이 Mockito를 사용하면 테스트할 때 원하는 결과를 순차적으로 반환할 수 있습니다.

참고 자료: Mockito Official Website