[java] Mockito를 사용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출했을 때 원하는 결과를 순차적으로 반환하는 방법은?

우선 Mockito를 사용하기 위해서는 Mockito의 의존성을 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같은 의존성을 추가합니다:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.11.2</version>
    <scope>test</scope>
</dependency>

Mockito를 사용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출하고 반환값을 지정하기 위해 thenReturn을 사용합니다. 순차적으로 다른 결과를 반환하고 싶은 경우, thenReturn을 여러 번 사용하여 순차적으로 지정할 수 있습니다.

다음은 예제 코드입니다:

import static org.mockito.Mockito.*;

// 테스트 대상 클래스
public class MyClass {
    public int myMethod(int arg) {
        // 다른 메소드 호출
        int result = anotherMethod(arg);
        return result;
    }

    public int anotherMethod(int arg) {
        // 다른 메소드의 로직 구현
        // ...
        return arg * 2;
    }
}

// Mockito를 사용한 테스트 코드
public class MyClassTest {

    @Test
    public void testMyMethod() {
        // MyClass의 인스턴스를 생성합니다.
        MyClass myClass = mock(MyClass.class);

        // 반환할 순차적인 값을 정의합니다.
        when(myClass.myMethod(1)).thenReturn(2);
        when(myClass.myMethod(2)).thenReturn(4);
        when(myClass.myMethod(3)).thenReturn(6);

        // 테스트 대상 메소드 호출
        int result1 = myClass.myMethod(1); // 결과: 2
        int result2 = myClass.myMethod(2); // 결과: 4
        int result3 = myClass.myMethod(3); // 결과: 6

        // 결과 검증
        assertEquals(2, result1);
        assertEquals(4, result2);
        assertEquals(6, result3);
    }
}

위의 코드에서는 먼저 MyClass라는 테스트 대상 클래스를 정의하고, myMethod() 메소드에서 anotherMethod()를 호출하는 로직을 구현했습니다. 그리고 MyClassTest라는 테스트 클래스를 생성하여 MyClass를 모킹(mocking)하고, myMethod()를 호출할 때마다 순차적으로 다른 값을 반환하도록 지정했습니다.

따라서 myClass.myMethod(1)은 2를, myClass.myMethod(2)는 4를, myClass.myMethod(3)은 6을 반환합니다.

이렇게 Mockito를 사용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출하고 원하는 결과를 순차적으로 반환하는 방법을 알아보았습니다. Mockito를 사용하여 테스트 케이스를 작성하면 효과적으로 단위 테스트를 진행할 수 있습니다.

더 자세한 내용은 Mockito 공식 문서를 참고하세요: Mockito Documentation