我是Apache Camel的新手,我编写了一个扫描目录(/ test)的简单路径,文件将被复制到目录中时进行处理。任何人都知道如何编写骆驼单元测试以测试以下路线?有没有办法模拟将文件复制到/ test目录的过程,以便触发路由。
public void configure() {
from( "file:/test?preMove=IN_PROGRESS" +
"&move=completed/${date:now:yyyyMMdd}/${file:name}" +
"&moveFailed=FAILED/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}" )
.process(new Processor() {
public void process(Exchange exchange) throws IOException {
File file = (File) exchange.getIn().getBody();
// read file content ......
}
});
}
答案 0 :(得分:0)
您已通过多种正确方法之一完成了路由。但是有一些更重要的部分可以让你的代码运行 - 你应该创建一个上下文,用你的configure()
创建一个路由器,将它添加到一个上下文,然后运行这个上下文。
抱歉,我更喜欢bean到处理器,所以你也要注册一个bean。并使您在命名类中处理正常的命名方法。
我认为,最紧凑的信息是here。 JUnit测试是一个独立的应用程序,您需要将Camel作为JUnit测试的独立应用程序运行。
答案 1 :(得分:0)
我认为基本的想法是你模拟终端端点,这样你就可以检查你的路线是什么。有几种不同的方法,但您可以按如下方式测试您的路线:
public class MyRouteTest extends CamelSpringTestSupport {
private static final String INPUT_FILE = "myInputFile.xml";
private static final String URI_START = "direct:start";
private static final String URI_END = "mock:end";
@Override
public boolean isUseAdviceWith() {
return true;
}
@Override
protected AbstractApplicationContext createApplicationContext() {
return new AnnotationConfigApplicationContext(CamelTestConfig.class); // this is my Spring test config, where you wire beans
}
@Override
protected RouteBuilder createRouteBuilder() {
MyRoute route = new MyRoute();
route.setFrom(URI_START); // I have added getter and setters to MyRoute so I can mock 'start' and 'end'
route.setTo(URI_END);
return route;
}
@Test
public void testMyRoute() throws Exception {
MockEndpoint result = getMockEndpoint(URI_END);
context.start();
// I am just checking I receive 5 messages, but you should actually check the content with expectedBodiesReceived() depending on what your processor does to the those files.
result.expectedMessageCount(5);
// I am just sending the same file 5 times
for (int i = 0; i < 5; i++) {
template.sendBody(URI_START, getInputFile(INPUT_FILE));
}
result.assertIsSatisfied();
context.stop();
}
private File getInputFile(String name) throws URISyntaxException, IOException {
return FileUtils.getFile("src", "test", "resources", name);
}
我相信你已经解决了你的问题是2013年,但这就是我2017年将如何解决它。问候