[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