2017-02-15 1 views
-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

答えて

0

2つのJMS。

だから、いいえ、私は `expectedBodiesReceivedInAnyOrder`と同じ問題を抱えていない

quote2.expectedBodiesReceivedInAnyOrder(msg3, msg4); 
+0

quote2.expectedBodiesReceived(msg3, msg4); 

から変更する必要があります。 (この問題は、既存のものに 'InAnyOrder'ユニットのテストを追加しようとしたために発生しました。)また、これはtestMultipleBodiesが1つしか失敗しない理由を説明していません。 – mkreich

関連する問題