[java] Mockito를 사용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출했을 때 인자들 중 특정 조건을 만족하는 값을 찾는 방법은?
  1. Mockito의 ArgumentCaptor를 사용하여 메소드 호출에 전달된 인자들을 캡처합니다.
  2. 캡처한 인자들을 순회하며 원하는 조건을 충족하는 값을 찾습니다.

아래는 예제 코드입니다:

import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;

// 테스트할 클래스
class MyClass {
    public void method1(String arg1, int arg2) {
        // 다른 메소드 호출
        method2(arg1, arg2);
    }
    
    public void method2(String arg1, int arg2) {
        // 로직 수행
    }
}

// 테스트 클래스
class MyTest {
    @Test
    public void testMethod1() {
        // ArgumentCaptor 생성
        ArgumentCaptor<String> arg1Captor = ArgumentCaptor.forClass(String.class);
        ArgumentCaptor<Integer> arg2Captor = ArgumentCaptor.forClass(Integer.class);

        // 테스트할 객체 생성
        MyClass myClass = Mockito.spy(new MyClass());

        // method2 호출 시 전달되는 인자들 캡처
        Mockito.doNothing().when(myClass).method2(arg1Captor.capture(), arg2Captor.capture());

        // method1 호출
        myClass.method1("test", 123);

        // 캡처한 인자들 확인
        List<String> arg1Values = arg1Captor.getAllValues();
        List<Integer> arg2Values = arg2Captor.getAllValues();

        // 조건을 만족하는 값이 있는지 확인
        for (int i = 0; i < arg1Values.size(); i++) {
            if (arg1Values.get(i).equals("test") && arg2Values.get(i) == 123) {
                // 조건을 만족하는 값이 있으면 성공 처리
                // 필요에 따라 추가 작업 수행
                return;
            }
        }

        // 조건을 만족하는 값이 없으면 실패 처리
        // 필요에 따라 예외를 던지거나 다른 작업 수행
        fail("No matching value found");
    }
}

위의 코드에서는 MyClass라는 클래스의 method1에서 method2를 호출할 때 전달된 인자들을 캡처하고, 캡처된 인자들의 값을 확인하여 조건을 만족하는지 판단합니다. testMethod1은 테스트케이스 메소드로, MyClassmethod1 호출 후 캡처한 인자들을 확인하여 조건을 만족하는 값이 있는지 검증합니다. 조건을 만족하는 값이 있으면 테스트를 성공 처리하고, 없으면 테스트를 실패 처리합니다.

이 예제에서는 단순히 값의 일치 여부만 확인하지만, 필요에 따라 다른 로직을 추가하여 더 복잡한 조건을 검증할 수도 있습니다.

더 자세한 내용은 Mockito 공식 문서를 참고하시면 도움이 될 것입니다.