私のサービスには次のルートがあります。
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 呼び出しはテーブル内の行を更新しますが、これはテスト中ではないので、エンドポイントがヒットしたときのようなことをしたいのですが、値 1 の CamelMyBatisResult ヘッダーを返します。2 番目の mybatis エンドポイントは hashmap(最初のテストでは空、2 番目のテストでは入力済み)。キャメル テストで when/then のようなメカニズムを実装するにはどうすればよいですか? 私は模擬エンドポイントのラクダのドキュメントを見てきましたが、それを適用して交換に値を返す方法がわかりません。その後、ルートを続行します(テストの最終結果は、または添付ファイルなしで送信されます)
編集: replace().set* メソッドの両方を使用して、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=" + "test@test.com"
+"&from=" + "test1@test1.com");
}
});
ProducerTemplate prod = context.createProducerTemplate();
prod.send(TEST, exch);
assertThat(exch.getIn().getHeader("CamelMyBatisResult"), is(1));
assertThat(exch.getIn().getBody(), is(""));
}
これまでのところ、本文と同様に、ヘッダーはまだ null です (TEST 変数は直接コンポーネントです)。