Прежде всего: вы используете AdviceWith , поэтому вы должны поместить аннотацию @UseAdviceWith
на ваш тестовый класс. В противном случае автоматический запуск контекста Camel и рекомендации по маршруту могут перекрываться.
Для пропущенного сообщения на макете: возможно ваш тест только что подтвердил слишком рано . Я предполагаю, что производитель не блокирует, пока сообщение обрабатывается, но утверждение MockEndpoint следует сразу же после отправки сообщения. Сразу после отправки сообщения количество полученных сообщений остается равным 0.
Чтобы проверить, помогает ли ожидание, вы можете вставить Thread.sleep (). Если это работает, вы должны избавиться от Thread.sleep () и заменить его на Camel NotifyBuilder
Просто увидел другой момент. Последняя строка to()
в вашей цепочке interceptSendToEndpoint
указывает на переменную экземпляра MockEndpoint. Я думаю, что это должно указывать на URI MockEndpoint, то есть .to("mock:success_result")
И даже еще один: вы получаете первый маршрут к совету с getRouteDefinition(STUB_FILE_DOWNLOAD_ROUTE_ID)
, но в этом блоке рекомендаций вы советуете оба маршрута . Это, вероятно, причина вашей проблемы. Второй маршрут не рекомендуется, и поэтому ваш макет не на месте. Вы должны посоветовать второй маршрут в отдельном блоке советов
@Before
public void setup() throws Exception {
camelContext.getRouteDefinition(STUB_FILE_DOWNLOAD_ROUTE_ID).autoStartup(true).adviceWith(camelContext, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
replaceFromWith(MOCK_IMPORT_STUB_DOWNLOAD);
}
});
camelContext.getRouteDefinition(STUB_FILE_IMPORT_ROUTE_ID).autoStartup(true).adviceWith(camelContext, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
interceptSendToEndpoint("log:route.StubRoute?level=DEBUG").skipSendToOriginalEndpoint().to("mock:success_result");
}
});
camelContext.start();
}