Я хочу создать тест JUNIT, который для маршрута, который выполняет поиск в базе данных, указывает на мой фиктивный поиск в базе данных.
Оба поиска определены как конечные точки:
<endpoint id="select-info" uri="sql:{select ...}"/>
<endpoint id="mock-select-info" uri="sql:{select ...}"/>
В настоящее время единственный способ, которым я могу добиться, это изменить маршрут, чтобы использовать фиктивную конечную точку, но это определенно не идеально.Я видел в коде другие JUNIT-тесты, использующие adviceWith (так что это не проблема выпуска верблюда, как я видел в других постах), но, возможно, я неправильно понимаю, так как мне не удается его использовать.
Итак, предположим, что маршрут выглядит следующим образом:
<route id="request-route" ...>
<from uri="direct:request-handler" />
<to ref="select-info" />
</route>
Я создал свой Junit, используя код:
@Test
public void testEntireRouteWithMockSelect() throws Exception {
context.getRouteDefinition(ORCHESTRATION_ROUTE_ID).adviceWith(context,
new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
weaveById("select-info").replace().to("mock-select-info");
}
});
context.setTracing(true);
context.start();
//response validation and asserts
}
Насколько я понимаю в приведенном выше коде, во времяВыполнение маршрута, вместо использования «select-info», будет использоваться «mock-select-info», но выполнение завершится неудачно с сообщением об ошибке:
***java.lang.IllegalArgumentException: There are no outputs which matches: select-info in the route***
Согласно полученным объяснениям, я понялсвязано с использованием ref вместо id.
Но я понятия не имею, как изменить свой маршрут.Я думал о попытке (согласно комментариям, вот как я понимаю, я могу это сделать):
<to ref="select-info" id="select-info"/>
Но тогда это вызовет исключение NullPointerException.
Я использую Camel 2.15 BTW.
Спасибо!