我无法弄清楚如何在Apache Camel的模拟端点期望中将ValueBuilder.convertTo用作子句。由于某些原因,包含convertTo的期望将被忽略。

这是说明问题的测试:

package wheleph;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;

public class ConvertToTest extends CamelTestSupport {

    private static final String INBOUND_ENDPOINT = "direct:inbound";
    private static final String OUTBOUND_ENDPOINT = "mock:outbound";

    @Test
    public void testConvertToBody() throws InterruptedException {
        MockEndpoint mockOutboundEndpoint = getMockEndpoint(OUTBOUND_ENDPOINT);
        mockOutboundEndpoint.expectedMessageCount(1);
        mockOutboundEndpoint.message(0).body().convertTo(String.class).isEqualTo("Blah");

        template.sendBody(INBOUND_ENDPOINT, "Message 1");

        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from(INBOUND_ENDPOINT).
                        to(OUTBOUND_ENDPOINT);
            }
        };
    }
}


上面的测试用例应该失败,因为模拟端点实际上收到的消息的主体为“消息1”,该消息不等于期望值“ Blah”。但是,此测试为绿色。

但是,如果我从模拟端点设置(convertTo)中删除了mockOutboundEndpoint.message(0).body().convertTo(String.class).isEqualTo("Blah")
则测试将失败,应有的失败。

我是否以错误的方式使用了ValueBuilder.convertTo,或者这是Apache Camel测试框架中的错误?

最佳答案

只需提供类型作为body的参数即可,如下所示:

mockOutboundEndpoint.message(0).body(String.class).isEqualTo("Blah");

08-26 14:28