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

가장 먼저 Mockito를 사용하기 위해 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다.

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>${mockito.version}</version>
  <scope>test</scope>
</dependency>

Mockito를 적용하려는 클래스의 인스턴스를 목 객체로 만들고, 해당 메소드에서 원하는 동작을 정의하는 방법은 다음과 같습니다.

// 테스트 대상 클래스
public class MyClass {
    public int methodA(int arg1, int arg2) {
        return methodB(arg1, arg2) + 5;
    }

    public int methodB(int arg1, int arg2) {
        // 외부에 의존하는 동작이 있을 수 있는 메소드
        // 실제 동작은 실행되지 않도록 설정해야 함
        throw new UnsupportedOperationException();
    }
}

// 테스트 클래스
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
    @Mock
    private MyClass myClassMock;

    @Test
    public void testMethodA() {
        // methodB의 결과를 조건에 따라 정의하기 위해 Mockito.when()을 사용
        Mockito.when(myClassMock.methodB(3, 4)).thenReturn(10);
        
        // methodA 호출 결과를 확인
        int result = myClassMock.methodA(3, 4);
        
        // 예상한 결과와 일치하는지 검증
        Assert.assertEquals(15, result);
    }
}

위의 예제에서는 MyClassmethodB가 실행되지 않도록 UnsupportedOperationException을 던지도록 설정했습니다. 대신, methodB(3, 4) 호출 시 10을 반환하도록 Mockito.when()을 사용하여 정의하였습니다.

이후 methodA를 호출하면 methodB(3, 4)의 결과에 5를 더한 값인 15를 반환하는 것을 확인할 수 있습니다.

이와 같은 방식을 사용하여 Mockito를 활용하면 특정 메소드의 동작을 원하는 결과로 조건에 따라 반환할 수 있습니다.

더 자세한 내용은 Mockito 공식 문서(https://site.mockito.org/)를 참고하시기 바랍니다.