java - 在 Camel 中测试我的对象的正确方法

标签 java junit apache-camel

我正在尝试为 Camel 路线设置测试。我的测试路线读取一个二进制文件并将其发送到翻译器 bean,返回一个 POJO。现在,我想对 POJO 进行一些断言,以确保其中的值与已知值匹配。我认为标准的东西。在我见过的示例中,主体似乎始终是 String 或原始类型,并且可以对其进行简单的断言。然而,就我而言,它是一个对象,所以我想以某种方式获取该对象。

这是我迄今为止尝试过的:

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("file:///path/to/dir/of/test/file/?noop=true")
            .bean(TranslatorBean.class)
            .to("mock:test").end();
        }
    };
}

@Test
public void testReadMessage() throws Exception {

    MockEndpoint endpoint = getMockEndpoint("mock:test");

    endpoint.whenAnyExchangeReceived(new Processor() {      
        @Override
        public void process(Exchange exchange) throws Exception {           
            Object body = exchange.getIn().getBody();

            assertIsInstanceOf(MyPOJO.class, body);

            MyPOJO message = (MyPOJO) body;

            assertEquals("Some Field", someValue, message.getSomeField());

            // etc., etc.

        }           
    });


    //If I don't put some sleep here it ends before anything happens
    Thread.sleep(2000);

}

当我运行它时,它似乎运行正确,但是当我单步执行时,我可以看到断言失败。由于某种原因,这没有被报告。

然后我尝试在 route 内联我的处理器,如下所示:

public void configure() throws Exception {
    .from("file:///path/to/dir/of/test/file/?noop=true")
    .bean(TranslatorBean.class)
    .process(new Processor() {
        //same code as before
     });
}

这种方法可行,但有一个很大的问题。 JUnit 仍然不会报告任何失败的断言。相反,它们被困在 Camel 中,并报告为 CamelExecutionException,并且完全没有有关原因的信息。只有通过调试器才能确定哪个断言失败了。另外,这样我的整个测试都是在配置方法中而不是在它自己的测试方法中。我必须包含一个带有 sleep 的空测试才能使其运行。显然这很糟糕,但我确信这里正确的做法是什么。看起来处理器可能不是正确的路线,但我没有看到正确的方法。非常感谢任何指导。

最佳答案

如果您正在寻找一种方法来检索对象本身并对其执行断言,您需要类似以下内容:

Product resultProduct = resultEndpoint.getExchanges().get(0).getIn().getBody(Product.class);
assertEquals(expectedEANCode, resultProduct.getEANCode());

其中 resultEndPoint 是模拟端点。

关于java - 在 Camel 中测试我的对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800364/

相关文章:

java - 没有参数分支的 void 方法的测试用例

rest - 如何在没有 Spring 的情况下在 CXF Rest Web 服务中使用 Apache Camel

java - AspectJ 'thisJoinPoint' 抛出异常

java - 将测试套件设置为忽略

java - While 循环终止

java - 如何在 Eclipse 中获取调试 View ?

java - Camel 过滤器方法签名

unit-testing - Apache Camel bean 单元测试

java - 使用 .NET Web 服务时将 ArrayOfStrings 转换为 JAVA 中的 String[]

java - 使用 GridFSOperations 获取所有文档