如何测试从目录读取的 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
.
将它们变成测试中的模拟
我正在创建一个 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
.