java - mock 幂等消费者

标签 java unit-testing apache-camel

我正在测试我的应用程序,它将文件从 ftp 发送到我的计算机,并且我正在检查不要将一个文件复制两次。为此,我使用IdempotencyConsumer
我的问题是我无法运行测试,因为这个 IdempotantConsumer 总是给我错误。
如何解决这个问题?

类别

@Component
public class Converter extends SpringRouteBuilder {

@Override
public void configure() throws Exception {

final XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
xmlJsonFormat.setTypeHints(String.valueOf("YES"));

from("ftp://Mike@localhost?" +
        "noop=true&binary=true&consumer.delay=5s&include=.*xml")
        .idempotentConsumer(header("CamelFileName"), FileIdempotentRepository.fileIdempotentRepository(new File("data", "repo.dat")))
        .marshal(xmlJsonFormat).to("file://data").process(
        new Processor() {
            //System.out.println();
        }
    });
   }
}    

测试类

public class ConverterTest extends CamelTestSupport {

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new Converter();
}

@Test
public void testAdvisedMockEndpoints() throws Exception {
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
    @Override
    public void configure() throws Exception {
        replaceFromWith("direct:inputXML");
        interceptSendToEndpoint("file://data")
                .skipSendToOriginalEndpoint()
                .to("mock:outXML");
    }
});        

    context.start();
    getMockEndpoint("mock:outXML").expectedMessageCount(1);        
    template.sendBody("direct:inputXML", "Test data");        
    assertMockEndpointsSatisfied();
}
}

我收到以下错误:

org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[Message: Test data]
Caused by: org.apache.camel.processor.idempotent.NoMessageIdException: No message ID could be found using expression: header(CamelFileName) on message exchange: Exchange[Message: Test data]

最佳答案

如果正常启动上下文,CamelFileName header 将由 ftp 组件添加。 但由于您在测试中使用直接注入(inject)消息,情况可能并非如此。

尝试通过使用 .setHeader("CamelFileName",constant("msg01.txt")) 手动添加 header 来调整您的测试

关于java - mock 幂等消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496702/

相关文章:

c# - NUnit 和测试 Xamarin PCL

unit-testing - 使用 Mocks 使用 Jest 和 Typescript 进行测试

java - 如何在 Camel 上下文中进行 throttle

java - 不使用 Synchronized 的安全线程队列

java - 单击时如何获取动态生成的按钮的 id

java - 字符串常量池的count总数是多少?

java - 将不同数据集概括为坐标系以显示为图形的算法

java - 莫基托 : Mocking and returning a different type value

java - Java DSL RouteBuilder 的配置方法内的 Exchange/body 引用

java - Camel Spring JMS 队列连接示例