[java] Mockito를 사용하여 특정 메소드에 전달된 인자들로 다른 메소드를 호출했을 때 인자들 중 특정 조건을 만족하는 값을 찾는 방법은?
- Mockito의 ArgumentCaptor를 사용하여 메소드 호출에 전달된 인자들을 캡처합니다.
- 캡처한 인자들을 순회하며 원하는 조건을 충족하는 값을 찾습니다.
아래는 예제 코드입니다:
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
은 테스트케이스 메소드로, MyClass
의 method1
호출 후 캡처한 인자들을 확인하여 조건을 만족하는 값이 있는지 검증합니다. 조건을 만족하는 값이 있으면 테스트를 성공 처리하고, 없으면 테스트를 실패 처리합니다.
이 예제에서는 단순히 값의 일치 여부만 확인하지만, 필요에 따라 다른 로직을 추가하여 더 복잡한 조건을 검증할 수도 있습니다.
더 자세한 내용은 Mockito 공식 문서를 참고하시면 도움이 될 것입니다.