JAVA · 테스트
ArgumentCaptor
ArgumentCaptor로 메서드에 전달된 인자를 캡처하여 상세 검증합니다.
테스트고급ArgumentCaptorMockito인자캡처검증
핵심 설명
ArgumentCaptor로 메서드에 전달된 인자를 캡처하여 상세 검증합니다.
Java code
// import org.mockito.*;
// import static org.mockito.Mockito.*;
// ArgumentCaptor 패턴 (의사코드)
// class NotificationServiceTest {
// EmailSender sender = mock(EmailSender.class);
// NotificationService service = new NotificationService(sender);
//
// @Test
// void sendOrderConfirmation() {
// // When
// service.confirmOrder("ORD-123", "hong@test.com");
//
// // Then: 인자 캡처
// ArgumentCaptor<Email> captor = ArgumentCaptor.forClass(Email.class);
// verify(sender).send(captor.capture());
//
// Email captured = captor.getValue();
// assertEquals("hong@test.com", captured.getTo());
// assertTrue(captured.getSubject().contains("ORD-123"));
// assertTrue(captured.getBody().contains("주문 확인"));
// }
//
// @Test
// void sendMultipleEmails() {
// service.notifyAll(List.of("a@test.com", "b@test.com"));
//
// ArgumentCaptor<Email> captor = ArgumentCaptor.forClass(Email.class);
// verify(sender, times(2)).send(captor.capture());
//
// List<Email> allEmails = captor.getAllValues();
// assertEquals(2, allEmails.size());
// assertEquals("a@test.com", allEmails.get(0).getTo());
// }
// }
class Main {
public static void main(String[] args) {
System.out.println("ArgumentCaptor: 복잡한 객체 인자의 내부 상태를 검증합니다.");
System.out.println("getValue()=마지막 캡처, getAllValues()=모든 캡처");
}
}학습 팁
ArgumentCaptor는 복잡한 객체가 올바르게 구성되었는지 검증할 때 유용합니다. DTO나 이벤트 객체 검증에 자주 쓰입니다.
주의할 점
capture()를 when() 스텁에서 사용하면 예상치 못한 동작이 발생합니다. verify()에서만 사용하세요.
자주 묻는 질문
ArgumentCaptor란 무엇인가요?
ArgumentCaptor 로 메서드에 전달된 인자를 캡처하여 상세 검증합니다.
ArgumentCaptor 학습 시 주의할 점은 무엇인가요?
capture() 를 when() 스텁에서 사용하면 예상치 못한 동작이 발생합니다. verify() 에서만 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.