如何测试从目录读取的 Camel 路由?

How Do I Test A Camel Route That Reads From A Directory?

我正在创建一个 Camel 应用程序,它读取放入 FTP 服务器目录中的文件,转换它们并上传到 REST API。

如果我创建一个路径来读取这样的文件:

    from("file://target/input?delay=5s")
      .choice()
      .when(header(Exchange.FILE_NAME).endsWith(".xml"))
        .unmarshal(jaxb)

target/input 目录必须存在,这会使测试有点尴尬,因为我的测试资源可能不在正确的目录中。

在我的测试中,只获取测试文件的内容并将其放入路由的解组部分会更容易

    from("direct:xml")
      .unmarshal(jaxb)

如何使我的路由足够灵活以进行测试,而不只是将整个路由复制到测试 class 并修改输入组件?

您可以简单地使您的from端点可配置并通过应用程序属性.

配置它

例如,如果您使用 Spring:

@Value("${endpoint.consumer}")
private String consumerEndpoint;
...
from(consumerEndpoint)
...

然后您可以提供一个 测试配置 将端点配置为 direct:input 并使用 ProducerTemplate 将具有不同负载的测试消息发送到此端点.

实际应用属性:

endpoint.consumer=file://target/input?delay=5s

测试属性:

endpoint.consumer=direct:input

这样您就可以摆脱测试中的任何文件端点。

如果您还有 to 个端点,您也可以将它们设为可配置。您可以通过将它们配置为 mock:whatever.

将它们变成测试中的模拟