[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 값에 접근 가능

        // 프로퍼티 값 변경 코드를 작성하여 값 변경 여부를 검증
        // ...
    }
}

위의 예시에서는 SampleServicehelperMethod100이라는 값을 리턴하도록 Mockito를 사용하여 설정한 후, mainMethod를 호출하고 전달된 인자들을 ArgumentCaptor로 캡처합니다. 이후, ArgumentCaptor를 통해 캡처한 인자 값을 가져와서 프로퍼티 값을 변경하는 코드를 작성하면 됩니다.

이를 테스트 코드로 작성하면 객체의 프로퍼티 값이 올바르게 변경되는지 테스트할 수 있습니다.

이 방법을 활용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출하고 객체의 프로퍼티 값을 변경하는 작업을 수행할 수 있습니다.

더 자세한 정보는 Mockito의 공식 문서를 참조하시기 바랍니다: Mockito 공식 문서