Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheCamel单元测试模拟SideEffect_Java_Junit_Apache Camel - Fatal编程技术网

Java ApacheCamel单元测试模拟SideEffect

Java ApacheCamel单元测试模拟SideEffect,java,junit,apache-camel,Java,Junit,Apache Camel,下面的代码与类FirstMockTest中的Camel in Action一书中的示例类似: String msg1 = "Camel Msg1"; String msg2 = "Camel Msg2"; String msg3 = "Camel Msg3"; String msg4 = "Camel Msg4"; @Override protected RouteBuilder createRouteBuilder() throws Exception { return new Ro

下面的代码与类FirstMockTest中的Camel in Action一书中的示例类似:

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>
FirstMockTest>testMultipleBodies2失败
java.lang.AssertionError:mock://quote2 邮件正文:0。
预期:但是:
删除testMultipleBodies使测试不会失败 并更改template.sendBody命令
…应为:但为:

看来配置中的两条路由没有分开

版本: ApacheCamel:2.5.0
Junit:4.11

这两条JMS路由可以并发处理,因此根据CPU时间等,消息可以以不同的顺序到达模拟端点

所以应该从

quote2.expectedBodiesReceived(msg3, msg4);


不,我在任何订单中收到的
ExpectedBody都有同样的问题。(发生此问题的原因是我试图将Yorder中的
单元测试添加到现有的单元测试中。)此外,这并不能解释为什么只有一个testMultipleBodies时它从不失败。
quote2.expectedBodiesReceivedInAnyOrder(msg3, msg4);