[java] Mockito를 사용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출했을 때 객체의 프로퍼티 값을 변경하는 방법은?
우선 Mockito를 사용하기 위해 다음과 같이 의존성을 추가해주세요:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.12.4</version>
<scope>test</scope>
</dependency>
가정해보겠습니다. 다음과 같은 SampleService
라는 클래스가 있다고 가정해봅시다:
public class SampleService {
public void mainMethod(String arg1, int arg2) {
int result = helperMethod(arg1, arg2);
// 프로퍼티 값 변경 코드 작성
}
public int helperMethod(String str, int num) {
// 어떤 연산을 수행한 후 결과를 리턴
}
}
이때, mainMethod
에서 helperMethod
를 호출하고, 호출된 helperMethod
의 리턴 값을 기반으로 객체의 프로퍼티 값을 변경하고자 한다면, Mockito를 사용하여 다음과 같이 테스트 코드를 작성할 수 있습니다:
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
public class SampleServiceTest {
@Test
public void testMainMethod() {
// Mock 객체 생성
SampleService sampleServiceMock = mock(SampleService.class);
// helperMethod의 리턴 값을 설정
when(sampleServiceMock.helperMethod(anyString(), anyInt())).thenReturn(100);
// ArgumentCaptor를 사용하여 mainMethod에 전달된 인자들을 캡처
ArgumentCaptor<String> arg1Captor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Integer> arg2Captor = ArgumentCaptor.forClass(Integer.class);
// mainMethod 호출
sampleServiceMock.mainMethod("hello", 42);
// ArgumentCaptor로 캡처한 인자들을 확인하여 프로퍼티 값 변경 여부 검증
verify(sampleServiceMock).helperMethod(arg1Captor.capture(), arg2Captor.capture());
// arg1Captor.getValue()를 통해 arg1 값에 접근 가능
// arg2Captor.getValue()를 통해 arg2 값에 접근 가능
// 프로퍼티 값 변경 코드를 작성하여 값 변경 여부를 검증
// ...
}
}
위의 예시에서는 SampleService
의 helperMethod
가 100
이라는 값을 리턴하도록 Mockito를 사용하여 설정한 후, mainMethod
를 호출하고 전달된 인자들을 ArgumentCaptor로 캡처합니다. 이후, ArgumentCaptor를 통해 캡처한 인자 값을 가져와서 프로퍼티 값을 변경하는 코드를 작성하면 됩니다.
이를 테스트 코드로 작성하면 객체의 프로퍼티 값이 올바르게 변경되는지 테스트할 수 있습니다.
이 방법을 활용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출하고 객체의 프로퍼티 값을 변경하는 작업을 수행할 수 있습니다.
더 자세한 정보는 Mockito의 공식 문서를 참조하시기 바랍니다: Mockito 공식 문서