0

我想我已经看到了一种优雅的方式来使用文件作为 apache camel 中单元测试的输入,但是我的谷歌技能让我失望了。

我想要的是而不是:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
    <snip>...long real life xml that quickly fills up test files.</snip>";
template.sendBody("direct:create", xml);

我想我看到的是类似的

template.sendBody("direct:create", someCamelMetod("/src/data/someXmlFile.xml"));

任何人都知道在哪里/是否记录在案?

编辑:

如果有人知道更好的方法,仍然很感兴趣。

4

2 回答 2

3

如果我正确理解您的问题,您希望将 xml 文件作为输入发送到您要测试的路线。我的解决方案是使用作为 Camel 测试支持的一部分的 advisorWith 策略。在这里阅读: http: //camel.apache.org/testing.html

因此,假设正在测试的路线是这样的:

from("jms:myQueue")
   .routeId("route-1")
   .beanRef(myTransformationBean)
   .to("file:outputDirectory");

在您的测试中,您可以通过从文件轮询使用者替换它来将 xml 发送到此路由。

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
   @Override
   public void configure() throws Exception {
       replaceRouteFromWith("route-1", "file:myInputDirectory");
   }
});
context.start();

然后,您可以将输入的 xml 文件放在 myInputDirectory 中,它将被拾取并用作路由的输入。

于 2012-11-05T07:34:06.353 回答
0

不是真的,你必须自己做一些小工作。您知道,读取文本文件并不是那么简单,因为您可能想知道编码。在您的第一种情况(内联字符串)中,您始终使用 UTF-16。一个文件可以是任何东西,你必须知道它,因为它不会告诉你它是什么编码。鉴于您有 UTF-8,您可以执行以下操作:

public String streamToString(InputStream str){
   Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A"); 
   if (scanner.hasNext()) 
      return scanner.next(); 
   return "";
}

// from classpath using ObjectHelper from Camel.
template.sendBody("direct:create", streamToString(ObjectHelper.loadResourceAsStream("/src/data/someXmlFile.xml")));
于 2012-11-03T20:39:50.177 回答