У меня есть следующий маршрут в моей службы:Camel: Mock и возвращаемое значение из компонента в маршруте
public void configure() {
/*
* Scheduled Camel route to produce a monthly report from the audit table.
* This is scheduled to run the first day of every month.
*/
// @formatter:off
from(reportUri)
.routeId("monthly-report-route")
.log("Audit report processing started...")
.to("mybatis:updateProcessControl?statementType=Update")
.choice()
/*
* If the rows updated is 1, this service instance wins and can run the report.
* If the rows updated is zero, go to sleep and wait for the next scheduled run.
*/
.when(header("CamelMyBatisResult").isEqualTo(1))
.process(reportDateProcessor)
.to("mybatis:selectReport?statementType=SelectList&consumer.routeEmptyResultSet=true")
.process(new ReportProcessor())
.to("smtp://smtpin.tilg.com?to="
+ emailToAddr
+ "&from=" + emailFromAddr)
.id("RecipientList_ReportEmail")
.endChoice()
.end();
// @formatter:on
}
Когда я пытаюсь запустить тест на это он дает мне ошибку о том, верблюд не может автоматически создать компонент mybatis , Я неопытен с проверкой верблюжьих маршрутов, поэтому я не совсем уверен, куда идти с этим. Первый вызов mybatis обновляет строку в таблице, которая не тестируется, поэтому я хотел бы сделать что-то вроде, когда удаляется конечная точка, возвращает заголовок CamelMyBatisResult со значением 1. Вторая конечная точка mybatis должна возвращать хэш-карту (пустой для первого теста, заполненный для второго). Как мне приступить к реализации механизма «когда-то» или «с помощью верблюда»? Я посмотрел на макетные документы верблюжьей верблюжии, но я не могу понять, как применить это, и вернуть ему значение в обмен, а затем продолжить маршрут (конечным результатом теста является проверка того, что письмо с или без вложения направляется)
EDIT: пытался использовать как заменить() набор * метода и замена mybatis конечных точек с вызовом встраивать процессоры:.
@Test
public void test_reportRoute_NoResultsFound_EmailSent() throws Exception {
List<AuditLog> bodyList = new ArrayList<>();
context.getRouteDefinition("monthly-report-route").adviceWith(context,
new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
replaceFromWith(TEST);
weaveById("updateProcControl").replace()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("CamelMyBatisResult", 1);
}
});
weaveById("selectReport").replace()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody(bodyList);
}
});
weaveById("RecipientList_reportEmail").replace()
.to("smtp://localhost:8083"
+"?to=" + "[email protected]"
+"&from=" + "[email protected]");
}
});
ProducerTemplate prod = context.createProducerTemplate();
prod.send(TEST, exch);
assertThat(exch.getIn().getHeader("CamelMyBatisResult"), is(1));
assertThat(exch.getIn().getBody(), is(""));
}
до сих пор, заголовок по-прежнему нулевой , как и тело (переменная TEST является прямым компонентом)
Можете ли вы отправить сообщение об ошибке вы получаете? трассировки стека? –
Авто создавать вещи на самом деле не проблема; Я хочу издеваться над этими конечными точками и возвращать ответ, так как его не те конечные точки, которые непосредственно тестируются, поэтому им не очень важно получить созданный компонент mybatis. – jbailie1991
В этом случае установите .id() для каждого .to (), а затем вы перехватите, замените. и установить значения жестко настроенного ответа. См. Рекомендацию для тестирования .. http://camel.apache.org/advicewith.html –