gpt4 book ai didi

java - 使用 Apache Camel 对 FTP 消费者进行单元测试

转载 作者:搜寻专家 更新时间:2023-11-01 01:08:41 25 4
gpt4 key购买 nike

我有以下路线。在单元测试中,由于我没有可用的 FTP 服务器,我想使用 camel 的测试支持并将无效消息发送到 "ftp://hostname/input" 并验证它失败并路由到 "ftp://hostname/error"

我浏览了主要讨论使用“模拟:”端点的文档,但我不确定如何在这种情况下使用它。

public class MyRoute extends RouteBuilder
{
@Override
public void configure()
{
onException(EdiOrderParsingException.class).handled(true).to("ftp://hostname/error");

from("ftp://hostname/input")
.bean(new OrderEdiTocXml())
.convertBodyTo(String.class)
.convertBodyTo(Document.class)
.choice()
.when(xpath("/cXML/Response/Status/@text='OK'"))
.to("ftp://hostname/valid").otherwise()
.to("ftp://hostname/invalid");
}
}

最佳答案

正如 Ben 所说,您可以设置 FTP 服务器并使用实际组件。可以嵌入 FTP 服务器,或者您可以在内部设置 FTP 服务器。后者更像是集成测试,您可能拥有专用的测试环境。

Camel 的测试包非常灵活,如果你想构建一个不使用真正的 FTP 组件的单元测试,那么你可以在测试前替换它。例如,在您的示例中,您可以将路由的输入端点替换为直接端点,以便更轻松地向路由发送消息。然后您可以使用拦截器拦截发送到 ftp 端点的消息,并绕过消息。

部分测试套件的建议提供了以下功能:http://camel.apache.org/advicewith.html .并且在 Camel in action book 的第 6 章中也有讨论,例如第 6.3 节,其中讨论了模拟错误。

在你的例子中你可以做类似的事情

public void testSendError() throws Exception {
// first advice the route to replace the input, and catch sending to FTP servers
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
replaceFromWith("direct:input");

// intercept valid messages
interceptSendToEndpoint("ftp://hostname/valid")
.skipSendToOriginalEndpoint()
.to("mock:valid");

// intercept invalid messages
interceptSendToEndpoint("ftp://hostname/invalid")
.skipSendToOriginalEndpoint()
.to("mock:invalid");
}
});

// we must manually start when we are done with all the advice with
context.start();

// setup expectations on the mocks
getMockEndpoint("mock:invalid").expectedMessageCount(1);
getMockEndpoint("mock:valid").expectedMessageCount(0);

// send the invalid message to the route
template.sendBody("direct:input", "Some invalid content here");

// assert that the test was okay
assertMockEndpointsSatisfied();
}

从 Camel 2.10 开始,我们将在使用建议时使拦截和模拟更容易一些。我们还引入了一个 stub 组件。 http://camel.apache.org/stub

关于java - 使用 Apache Camel 对 FTP 消费者进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com