-1
I持たクラスFirstMockTest
で予約するCamel in Action
からの例に次のコードsimiliart:Apacheのラクダのユニットテストモックsideffect
String msg1 = "Camel Msg1";
String msg2 = "Camel Msg2";
String msg3 = "Camel Msg3";
String msg4 = "Camel Msg4";
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("jms:topic:quote").to("mock:quote");
from("jms:topic:quote2").to("mock:quote2");
}
};
}
@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext context = super.createCamelContext();
//fake jms register
context.addComponent("jms", context.getComponent("seda"));
return context;
}
@Test
public void testMultipleBodies() throws InterruptedException {
MockEndpoint quote = getMockEndpoint("mock:quote");
template.sendBody("jms:topic:quote", msg1);
template.sendBody("jms:topic:quote", msg2);
quote.expectedBodiesReceived(msg1, msg2);
quote.assertIsSatisfied();
}
@Test
public void testMultipleBodies2() throws InterruptedException {
MockEndpoint quote2 = getMockEndpoint("mock:quote2");
template.sendBody("jms:topic:quote2", msg3);
template.sendBody("jms:topic:quote2", msg4);
quote2.expectedBodiesReceived(msg3, msg4);
quote2.assertIsSatisfied();
}
私は、次の ユニットテストのエラー出力を取得gradle clean test --tests FirstMockTest
ランニング:
FirstMockTest > testMultipleBodies2 FAILED
java.lang.AssertionError: mock://quote2 Body of message: 0.
Expected: <Camel Msg3> but was: <Camel Msg4>
testMultipleBodiesを削除すると、テストは失敗しません。 とtemplate.sendBodyコマンドを変更すると、 ....Expected: <Camel Msg4> but was: <null>
このように、configureの2つのルートは分離されていないようです。
バージョン: アパッチ-ラクダ:2.5.0 JUnitの:ルートが同時に処理することができ、したがって、CPUのタイミングなどに依存して、メッセージが偽のエンドポイントに異なる順序で到着することができ4.11
に
から変更する必要があります。 (この問題は、既存のものに 'InAnyOrder'ユニットのテストを追加しようとしたために発生しました。)また、これはtestMultipleBodiesが1つしか失敗しない理由を説明していません。 – mkreich