Apache camel 使用文件作为输入的Camel模拟测试

Apache camel 使用文件作为输入的Camel模拟测试,apache-camel,Apache Camel,我想为骆驼路线创建一个模拟测试,该路线使用以下文件作为输入: <route id="myroute"> <from uri="file:/var/file.log&amp;noop=true" /> . . . </route> 我想一定有更好的方法可以做到这一点,而不必更改原始的SpringXML文件。有什么帮助吗? 谢谢您可以在from语句中使用一个属性,然后在测试中替换该属性,也可以使用camel测试的编织支持修改测试的路由

我想为骆驼路线创建一个模拟测试,该路线使用以下文件作为输入:

<route id="myroute">
    <from uri="file:/var/file.log&amp;noop=true" />
     . . .
</route>
我想一定有更好的方法可以做到这一点,而不必更改原始的SpringXML文件。有什么帮助吗?
谢谢

您可以在from语句中使用一个属性,然后在测试中替换该属性,也可以使用camel测试的编织支持修改测试的路由

下面是后者的一个例子:

import org.apache.camel.Endpoint;
import org.apache.camel.EndpointInject;
import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

import java.io.File;

public class FooTest extends CamelTestSupport {

    private static final String URI_START_ENDPOINT = "direct:teststart";
    private static final String MY_ROUTE_ID = "MY_ROUTE";
    private static final String URI_END = "mock:end";

    @EndpointInject(uri = URI_START_ENDPOINT)
    private Endpoint start;

    @EndpointInject(uri = URI_END)
    private MockEndpoint unmarhsalResult;

    @Override
    public boolean isUseAdviceWith() {
        return true;
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        // return new MyRouteBuilder();
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("file:/var/file.log&noop=true").routeId(MY_ROUTE_ID)
                    .log("Content: ${body}");
            }
        };
    }

    @Override
    protected void doPostSetup() throws Exception {
        context.getRouteDefinition(MY_ROUTE_ID).adviceWith(context, new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                replaceFromWith(URI_START_ENDPOINT);
                weaveAddLast().to(URI_END);
            }
        });
        context.start();
    }

    @Test
    public void testUnmarshal() throws Exception {
        unmarhsalResult.expectedMessageCount(1);
        template.sendBody(URI_START_ENDPOINT, FileUtils.readFileToString(new File("src/test/resources/my_test_file.txt")));

        unmarhsalResult.assertIsSatisfied();
    }

}

您是否考虑过用属性配置< <代码> >代码>?像这样,您可以在单元测试中使用模拟端点覆盖它。非常感谢您的有用回复!
import org.apache.camel.Endpoint;
import org.apache.camel.EndpointInject;
import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

import java.io.File;

public class FooTest extends CamelTestSupport {

    private static final String URI_START_ENDPOINT = "direct:teststart";
    private static final String MY_ROUTE_ID = "MY_ROUTE";
    private static final String URI_END = "mock:end";

    @EndpointInject(uri = URI_START_ENDPOINT)
    private Endpoint start;

    @EndpointInject(uri = URI_END)
    private MockEndpoint unmarhsalResult;

    @Override
    public boolean isUseAdviceWith() {
        return true;
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        // return new MyRouteBuilder();
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("file:/var/file.log&noop=true").routeId(MY_ROUTE_ID)
                    .log("Content: ${body}");
            }
        };
    }

    @Override
    protected void doPostSetup() throws Exception {
        context.getRouteDefinition(MY_ROUTE_ID).adviceWith(context, new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                replaceFromWith(URI_START_ENDPOINT);
                weaveAddLast().to(URI_END);
            }
        });
        context.start();
    }

    @Test
    public void testUnmarshal() throws Exception {
        unmarhsalResult.expectedMessageCount(1);
        template.sendBody(URI_START_ENDPOINT, FileUtils.readFileToString(new File("src/test/resources/my_test_file.txt")));

        unmarhsalResult.assertIsSatisfied();
    }

}