使用文件作为单元测试的输入

时间:2012-11-03 14:04:27

标签: apache-camel

我想我已经看到了一种优雅的方式来使用文件作为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"));

有人知道在哪里/是否有记录?

编辑:

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

2 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,您希望将xml文件作为输入发送到您要测试的路由。我的解决方案是使用adviseWith策略,这是Camel测试支持的一部分。在此处阅读: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中,它将被检测并用作路径的输入。

答案 1 :(得分: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")));