[java] Mockito를 사용하여 특정 메소드에 전달된 인자들 중 특정 인자 값이 변경되었는지 확인하는 방법은?

ArgumentCaptor는 Mockito에서 제공하는 클래스로, 메소드 호출 시 전달된 인자들을 캡처하여 나중에 접근할 수 있도록 도와줍니다.

아래의 코드를 통해 ArgumentCaptor를 사용하여 특정 인자 값이 변경되었는지 확인하는 예제를 살펴보겠습니다.

import static org.mockito.ArgumentMatchers.*;
import org.mockito.Mockito;
import org.mockito.ArgumentCaptor;

...

@Test
public void testMethod() {
    // Mock 객체 생성
    YourClass yourClass = Mockito.mock(YourClass.class);

    // 메소드 호출과 함께 인자 값 전달
    yourClass.yourMethod("oldValue");

    // ArgumentCaptor 생성
    ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
    
    // 메소드 호출 시 넘겨진 인자들을 캡처
    Mockito.verify(yourClass).yourMethod(captor.capture());
    
    // 캡처한 인자 값 접근
    String capturedValue = captor.getValue();
    
    // 특정 조건에 따라 값이 변경되었는지 확인
    assertEquals("newValue", capturedValue);
}

위의 예제에서 YourClass.yourMethod()는 인자로 문자열을 받는 메소드라고 가정합니다. ArgumentCaptorString 타입으로 생성되었으며, yourMethod() 호출 시 전달된 인자 값을 캡처합니다.

그 후, captor.getValue()를 통해 캡처한 값을 가져와서 특정 조건과 비교할 수 있습니다.

이를 통해 특정 메소드에 전달된 인자들 중 특정 인자 값이 변경되었는지 Mockito를 사용하여 확인할 수 있습니다.

참고 자료: