3

我是 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 ......                 
          }
    });
}
4

2 回答 2

0

您已经通过许多正确方法之一完成了路由。但是还有一些更重要的部分可以让你的代码运行——你应该创建一个上下文,用这个 your 创建一个路由器configure(),将它添加到一个上下文中,然后运行这个上下文。

抱歉,比起处理器,我更喜欢 bean,所以你还必须注册一个 bean。并让您在命名类中处理普通的命名方法。

我认为,最紧凑的信息在这里。JUnit 测试是一个独立的应用程序,您需要将 Camel 作为独立应用程序运行以进行 JUnit 测试。

于 2013-03-18T09:43:48.463 回答
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 年将如何解决它。问候

于 2017-06-07T09:46:25.453 回答