[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);
}
}
위의 예제에서는 MyClass
의 methodB
가 실행되지 않도록 UnsupportedOperationException
을 던지도록 설정했습니다. 대신, methodB(3, 4)
호출 시 10을 반환하도록 Mockito.when()을 사용하여 정의하였습니다.
이후 methodA
를 호출하면 methodB(3, 4)
의 결과에 5를 더한 값인 15를 반환하는 것을 확인할 수 있습니다.
이와 같은 방식을 사용하여 Mockito를 활용하면 특정 메소드의 동작을 원하는 결과로 조건에 따라 반환할 수 있습니다.
더 자세한 내용은 Mockito 공식 문서(https://site.mockito.org/)를 참고하시기 바랍니다.