[java] Mockito를 사용하여 특정 메소드에 전달된 인자들 중 특정 조건을 만족하는 값을 찾는 방법은?

ArgumentCaptor는 Mockito에서 제공하는 클래스로, 메소드가 호출될 때 전달된 인자들을 캡처하여 검증하고 조작할 수 있습니다. 이를 사용하여 특정 메소드에 전달되는 인자들 중에서 원하는 조건을 만족하는 값을 찾을 수 있습니다.

다음은 Mockito를 사용하여 특정 메소드에 전달된 인자들 중 특정 조건을 만족하는 값을 찾는 예제 코드입니다.

import org.mockito.ArgumentCaptor;

// 테스트 대상 클래스
public class MyClass {
    public void myMethod(int number) {
        // 메소드 내용
    }
}

// 테스트 코드
@Test
public void testMyMethod() {
    MyClass myClass = Mockito.mock(MyClass.class);
    ArgumentCaptor<Integer> argumentCaptor = ArgumentCaptor.forClass(Integer.class);

    // MyClass의 myMethod를 호출할 때 전달되는 인자들을 캡처
    myClass.myMethod(10);
    myClass.myMethod(20);
    Mockito.verify(myClass, Mockito.times(2)).myMethod(argumentCaptor.capture());

    // 캡처된 인자들 중에서 조건을 만족하는 값을 찾기
    List<Integer> capturedValues = argumentCaptor.getAllValues();
    for (Integer value : capturedValues) {
        if (value > 15) {
            // 원하는 조건을 만족하는 값 처리
        }
    }
}

위 예제 코드에서는 ArgumentCaptor를 사용하여 myMethod에 전달되는 number 인자들을 캡처합니다. 그리고 그 중에서 15보다 큰 값들을 찾아 특정 조건을 만족하는 값 처리를 합니다.

참고로, ArgumentCaptor는 캡처된 값들을 순서대로 저장하는 리스트를 제공하므로, 순서에 따른 특정 값 검증이 가능합니다.

이와 같이 Mockito의 ArgumentCaptor를 활용하면 특정 메소드에 전달된 인자들 중에서 원하는 조건을 만족하는 값을 캡처하고 처리할 수 있습니다.

참고 자료: