기본적인 메시지 수 검증으로는 부족할 때가 많습니다. 특정 조건을 만족하는 메시지만 처리됐는지, 올바른 헤더가 설정됐는지, 처리 순서가 맞는지 등을 검증해야 합니다.
Mock 엔드포인트는 받은 모든 Exchange를 기록합니다. 이를 활용해 세밀한 검증이 가능합니다.
@Test
public void testMessageContent() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
// 바디 검증
mock.message(0).body().isInstanceOf(Order.class);
mock.message(0).body(Order.class).getAmount().isGreaterThan(1000);
// 헤더 검증
mock.message(0).header("status").isEqualTo("APPROVED");
mock.message(0).header(Exchange.HTTP_RESPONSE_CODE).isEqualTo(200);
template.sendBodyAndHeader("direct:orders", new Order(5000), "priority", "HIGH");
mock.assertIsSatisfied();
} 비동기 처리는 언제 완료될지 예측하기 어렵습니다. Mock 엔드포인트의 타임아웃과 대기 기능을 활용합니다.
@Test
public void testAsyncProcessing() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:async-result");
mock.expectedMessageCount(5);
mock.setResultWaitTime(10000); // 최대 10초 대기
// 비동기로 메시지 전송
for (int i = 0; i 멀티스레드 환경에서 메시지 처리 순서가 보장되어야 할 때 순서 검증이 필요합니다.
@Test
public void testMessageOrdering() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:ordered");
mock.expectedBodiesReceived("first", "second", "third");
// 순서가 반드시 일치해야 함
// 또는 순서 무관하게 포함 여부만 검증
mock.expectedBodiesReceivedInAnyOrder("first", "second", "third");
template.sendBody("direct:start", "first");
template.sendBody("direct:start", "second");
template.sendBody("direct:start", "third");
mock.assertIsSatisfied();
} 정상 경로만큼 예외 처리 경로도 테스트해야 합니다. 의도적으로 예외를 발생시켜 에러 핸들러가 올바르게 동작하는지 확인합니다.
@Test
public void testErrorHandling() throws Exception {
MockEndpoint errorMock = getMockEndpoint("mock:error");
errorMock.expectedMessageCount(1);
// 예외를 발생시키는 프로세서
context.getRouteDefinition("order-route")
.adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() {
weaveAddFirst().process(exchange -> {
throw new RuntimeException("의도적 실패");
});
}
});
template.sendBody("direct:orders", "테스트주문");
errorMock.assertIsSatisfied();
} 코스피 8% 폭락, 서킷브레이커 발동, SK텔레콤 Claude AI 차단까지. 한국의 AI 레버리지 버블이 단 하루…
SNS 사진 1장으로 30초 만에 딥페이크 영상이 완성됩니다. 당신의 얼굴이 이미 범죄에 악용되고 있을 수…
SNS 사진 1장으로 30초 만에 딥페이크 영상이 완성됩니다. 당신의 얼굴이 이미 범죄에 악용되고 있을 수…
달러/원 환율이 급등하는 이유와 실생활 영향을 정리했습니다. 지금 당장 활용할 수 있는 환전·투자 대응 전략까지…
미래에셋·미래에셋벤처투자·미래에셋생명이 동반 급등한 이유는 스페이스X 상장 기대감입니다. 세 회사가 스페이스X와 어떻게 연결되어 있는지 상세히 분석했습니다.
스페이스X 상장이 계속 미뤄지는 진짜 이유를 파헤쳤습니다. 화성 계획, 스타링크 분리, 국방 계약... 머스크가 절대…