Тестирование верблюжьего маршрута с фиктивной конечной точкой

Тестирование верблюжьего маршрута с использованием Springboot, Activemq & mock endpoint

У меня есть верблюжий маршрут, который читает форму activemq и передает процессору, который выполняет дальнейшую обработку и бизнес-логику.

Я пытаюсь проверить, производя и отправляя сообщение с помощью ProducerTemplate, создавая ложную конечную точку "mock:result" и ткая как последний узел для маршрута и выполняя утверждение на нем. Это не удовлетворяет утверждениям.

Верблюжий путь

from("queue:myIncomingQueue?username=***&password=***")
    .doTry()
        .log(LoggingLevel.INFO, "Incoming Message: [ body:${body} ]")
        .to("bean-validator:validateIncomingMessage")
        .unmarshal(myUnmarshller.format())
        .setHeader(Constants.MESSAGE_VALID, constant(true))
    .endDoTry()
    .doCatch(Exception.class)
        .log(LoggingLevel.ERROR, 
            "failed to parse message [ body:${body} ], Exception - "
                + exceptionMessage())
    .end()
    .choice()
        .when(header(Constants.MESSAGE_VALID).isNotNull())
            .doTry()
                .process(myProcessor)
            .endDoTry()
            .doCatch(Exception.class)
                .log(LoggingLevel.ERROR, 
                    "failed to process message [ body:${body} ], Exception - "
                        + exceptionMessage())
            .end()
        .endChoice()
    .end();

Тестовый класс:

@RunWith(CamelSpringBootRunner.class)
@SpringBootTest(classes = {Application.class}, properties = { 
    "camel.springboot.java-routes-include-pattern=**/MyRoute*"
})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints("mock:result")
public class MyRouteTest {

    @Autowired
    private CamelContext camelContext;

    @Produce(uri="queue:myIncomingQueue?username=***&password=***")
    private ProducerTemplate template;

    @EndpointInject(uri = "mock:result")
    private MockEndpoint mockOutput;

    @Before
    public void setUp() throws Exception
    {
        camelContext.getRouteDefinitions().get(0).adviceWith(camelContext,
            new AdviceWithRouteBuilder()
            {
                @Override
                public void configure() throws Exception {
                    weaveAddLast().to("mock:result");
                }
            });
        camelContext.start();
    }

    @Test
    public void messagesuccessful() throws Exception {
        Exchange dummyExchange = this.generateDataExchange();
        mockOutput.expectedMessageCount(1);
        mockOutput.expectedBodiesReceived(dummyExchange.getIn().getBody());
        mockOutput.message(0).header("API-X-HEADER").isEqualTo(123);

        template.send(dummyExchange);
        Thread.sleep(6000);
        mockOutput.assertIsSatisfied();
    }
}

Результат:

> java.lang.AssertionError: mock://result Received message count. Expected: <1> 
but was: <0>
Expected :<1> 
Actual   :<0>
<Click to see difference>

0 ответов

Другие вопросы по тегам