【问题标题】:Unit test Apache Camel specific routes by filtering (Model#setRouteFilter)通过过滤对 Apache Camel 特定路由进行单元测试 (Model#setRouteFilter)
【发布时间】:2022-06-29 03:11:37
【问题描述】:

如何在我的单元测试中仅包含某些路由。例如,如何只启用my-translation-route

public class TestRoute extends RouteBuilder {
    @Override
    public void configure() {
        from("ftp://my-ftp-server:21/messages")
                .routeId("my-inbound-route")
                .to("direct:my-translation-route");

        from("direct:my-translation-route")
                .routeId("my-translation-route")
                .bean(MyBean.class)
                .to("direct:my-outbound-route");

        from ("direct:my-outbound-route")
                .routeId("my-translation-route")
                .to("http://my-http-server:8080/messages");
    }
}

我尝试使用 Model#filterRoutes 但这不起作用。所有路线都已加载。

class TestRouteTest extends CamelTestSupport {
    @Override
    protected RoutesBuilder createRouteBuilder() {
        return new TestRoute();
    }

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

    @Test
    void testIfItWorks() throws Exception {
        context.setRouteFilterPattern("my-translation-route", null);

        AdviceWith.adviceWith(context, "my-translation-route", a -> {
            a.mockEndpointsAndSkip("direct:my-outbound-route");
        });

        context.start();

        getMockEndpoint("mock:direct:my-outbound-route").expectedBodyReceived().expression(constant("Hahaha! 42"));

        template.sendBodyAndHeaders("direct:my-translation-route", "42", null);

        assertMockEndpointsSatisfied();
    }
}

我让它与CamelTestSupport#getRouteFilterIncludePattern 的覆盖一起工作,例如:

@Override
public String getRouteFilterIncludePattern() {
    return "direct:my-translation-route";
}

但是这是为这个测试类中的所有测试设置的。

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    可能的(愚蠢的)解决方案:为您的路线设置有条件的自动启动,其值取决于您可以在单元测试期间使用特定值设置的(Camel 或 JVM)属性:

    public class TestRoute extends RouteBuilder {
    
        @PropertyInject(name="productionMode", defaultValue="true)
        private boolean productionMode;
    
        @Override
        public void configure() {
            from("ftp://my-ftp-server:21/messages")
                   ...
                    .autoStart(!productionMode); // <=here
    
           
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2013-04-24
      • 2017-07-05
      • 1970-01-01
      • 2015-01-23
      • 2012-03-21
      相关资源
      最近更新 更多