2012-11-03 38 views
0

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

我要的是不是:

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")); 

任何人都知道在哪里/如果这是记录?

编辑:

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

回答

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"))); 
3

如果我理解你的问题正确,您要发送一个XML文件作为输入你要测试的路线。我的解决方案是使用作为骆驼测试支持一部分的adviseWith策略。阅读在这里: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这将是纠察并用作输入路径。

相关问题