首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camel单元测试在模拟组件上设置期望

Camel单元测试在模拟组件上设置期望
EN

Stack Overflow用户
提问于 2015-02-13 05:43:04
回答 2查看 1.3K关注 0票数 0

我正在使用camel编写单元测试用例,下面是概述这里的步骤。在部分中,使用camel-test组件模拟现有的端点,下面是一个片段。

代码语言:javascript
复制
    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();

我想做类似的事情,但是我的body类型是一个POJO,没有重写的equals方法。

我试过了

代码语言:javascript
复制
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);

但我正在得到

代码语言:javascript
复制
Assertion error at index 0 on mock mock://result with predicate: BeanExpression[ method: deepEquals] == true evaluated as: null == true on Exchange[Message: MyPojo...]

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-13 10:28:12

尝尝这个,

代码语言:javascript
复制
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");
            }
        }
    });

另一种方式,

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2015-02-13 09:33:10

真奇怪。我也会犯同样的错误。在计算bean表达式的反射代码中似乎存在一个bug,可能是因为它是一个匿名的内部类。

试一试:

代码语言:javascript
复制
getMockEndpoint("mock:result").message(0).method(new Foo(), "deepEquals").isEqualTo(true);

并将deepEquals方法移到测试类中的命名类public static class Foo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28493234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档