Camel单元测试设置对模拟组件的期望

时间:2015-02-13 05:43:05

标签: java unit-testing mocking apache-camel

我正在使用驼峰测试编写单元测试用例,遵循以下步骤here。在使用驼峰测试组件模拟现有端点部分下,有一个代码段

    getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World");
    getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World");
    getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World");
    getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");

    template.sendBody("direct:start", "Hello World");

    assertMockEndpointsSatisfied();

我想做类似的事情,但我的身体类型是没有被覆盖的equals方法的POJO。

我试过

getMockEndpoint("mock:result").message(0).method(new Object() {
    public boolean deepEquals(Exchange in) {
    MyPojo pojo = in.getIn().getBody(MyPojo.class); 

    return //custom pojo equals logic;
    }

}, "deepEquals").isEqualTo(true);

但是我正在

Assertion error at index 0 on mock mock://result with predicate: BeanExpression[ method: deepEquals] == true evaluated as: null == true on Exchange[Message: MyPojo...]

消息的内容与我想要的完全一样,但是测试失败了。任何意见,将不胜感激。感谢

2 个答案:

答案 0 :(得分:1)

试试这个,

final MockEndpoint mock = getMockEndpoint("mock:result");
    mock.expects(new Runnable() {
        public void run() {

            MyPojo myPojo = mock.getExchanges().get(0).getIn().getBody(MyPojo.class);
            boolean status = //custom pojo equals logic;
            if(!status){
                fail("Testcase fails");
            }
        }
    });

另一种方式,

mock.whenAnyExchangeReceived(new Processor() {
        public void process(Exchange exchange) throws Exception {

            MyPojo myPojo = exchange.getIn().getBody(MyPojo.class);
            boolean status =//custom pojo equals logic;

            exchange.getIn().setBody(status);
        }
    });
    boolean out = template.requestBody(url, new MyPojo(), Boolean.class);
    assertEquals(true, out);

答案 1 :(得分:0)

怪异。我得到了同样的错误。在反射代码中似乎存在一个错误,其中bean表达式被评估,可能是由于这是一个匿名的内部类。

请改为尝试:

getMockEndpoint("mock:result").message(0).method(new Foo(), "deepEquals").isEqualTo(true);

deepEquals方法移动到某个测试类中的命名类public static class Foo