[java] Mockito를 사용하여 특정 메소드에 전달된 인자들 중 특정 인스턴스인 객체를 찾는 방법은?
보통 Mockito를 사용해서 메소드 호출시 전달된 인자들을 검증하기 위해서는 verify
메소드를 사용합니다. 그러나 verify
메소드는 호출된 메소드의 전달된 인자들을 모두 검증하므로 특정 인스턴스를 찾는 것은 어려울 수 있습니다.
Mockito에서 특정 인스턴스를 찾기 위해서는 ArgumentCaptor
클래스를 사용할 수 있습니다. ArgumentCaptor<T>
는 제네릭으로 전달받은 타입 T
의 인스턴스를 캡처하는 역할을 합니다.
다음은 ArgumentCaptor
를 사용하여 특정 인스턴스를 찾는 예제 코드입니다.
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
// 테스트 대상 클래스
public class MyClass {
public void myMethod(MyObject obj) {
// do something
}
}
// 테스트 클래스
public class MyClassTest {
@Test
public void testMyMethod() {
// ArgumentCaptor 생성
ArgumentCaptor<MyObject> captor = ArgumentCaptor.forClass(MyObject.class);
// MyClass 객체 생성
MyClass myClass = Mockito.mock(MyClass.class);
// myMethod 호출
myClass.myMethod(new MyObject());
// ArgumentCaptor를 사용하여 특정 인스턴스를 찾음
Mockito.verify(myClass).myMethod(captor.capture());
MyObject capturedObject = captor.getValue();
// 찾은 인스턴스를 검증
Assert.assertNotNull(capturedObject);
// 이후에 필요한 검증 작업 수행
}
}
이 예제에서는 ArgumentCaptor<MyObject>
를 생성하고, MyClass
의 myMethod
를 호출할 때 전달된 인자들을 캡처합니다. verify
메소드를 사용하여 myMethod
를 호출하고, captor.capture()
를 사용하여 캡처한 인스턴스를 가져옵니다. 이후에는 가져온 인스턴스를 필요에 따라 검증하거나 추가 작업을 수행할 수 있습니다.
이렇게 Mockito의 ArgumentCaptor
를 사용하여 특정 인스턴스를 찾을 수 있습니다. 이를 통해 메소드 호출시 전달된 인자들 중 원하는 객체를 검증하고 테스트할 수 있습니다.
참고:
- Mockito 문서: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#15
- Mockito ArgumentCaptor 문서: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentCaptor.html