Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel camel测试中的bean注入_Apache Camel - Fatal编程技术网

Apache camel camel测试中的bean注入

Apache camel camel测试中的bean注入,apache-camel,Apache Camel,我有一个驼峰应用程序,看起来像下面,它的路线如下:- //processor is a custom JSONProcessor extending Processor from("jetty:http://localhost:8888/orchestratorservice").process(processor); from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");

我有一个驼峰应用程序,看起来像下面,它的路线如下:-

//processor is a custom JSONProcessor extending Processor
from("jetty:http://localhost:8888/orchestratorservice").process(processor);
from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
public class OrderMainAppTest extends CamelTestSupport {

    @Produce(uri = "direct:getMarketplaceOrders")
    protected ProducerTemplate template;

    @EndpointInject(uri = "bean:orderHelper?method=getMarketplaceOrders")
    protected MockEndpoint resultEndpoint;

    @Test
    public void testSendMatchingMessage() throws Exception {
    String expectedBody = "<matched/>";

    template.sendBody("{\"fromDateTime\": \"2016-01-11 10:12:13\"}");

    resultEndpoint.expectedBodiesReceived(expectedBody);

    resultEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        @Override
        public void configure() {
        from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
        }
    };
    }
}
从(“direct:getMarketplaceOrders”)到(“bean:orderHelper?method=getMarketplaceOrders”)

代码的入口点如下所示:

public class OrderMainApp {
    public static void main(String... args) throws Exception {
    OrderMainApp orderMainApp = new OrderMainApp();
    DefaultCamelContext camelContext = new DefaultCamelContext();
    ProducerTemplate producer = camelContext.createProducerTemplate();
    camelContext.setRegistry(orderMainApp.createRegistry(producer));
    camelContext.addRoutes(new OrderRouteBuilder(producer));
    camelContext.start();
    }

    protected JndiRegistry createRegistry(ProducerTemplate producer) throws Exception {
    JndiRegistry jndi = new JndiRegistry();
    OrderHelper orderHelper = new OrderHelper();
    orderHelper.setProducer(producer);
    jndi.bind("orderHelper", orderHelper);
    return jndi;
    }
}
OrderRouteBuilder
configure
中,有如下路由:-

//processor is a custom JSONProcessor extending Processor
from("jetty:http://localhost:8888/orchestratorservice").process(processor);
from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
public class OrderMainAppTest extends CamelTestSupport {

    @Produce(uri = "direct:getMarketplaceOrders")
    protected ProducerTemplate template;

    @EndpointInject(uri = "bean:orderHelper?method=getMarketplaceOrders")
    protected MockEndpoint resultEndpoint;

    @Test
    public void testSendMatchingMessage() throws Exception {
    String expectedBody = "<matched/>";

    template.sendBody("{\"fromDateTime\": \"2016-01-11 10:12:13\"}");

    resultEndpoint.expectedBodiesReceived(expectedBody);

    resultEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        @Override
        public void configure() {
        from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
        }
    };
    }
}
我的目标是测试当我向
direct:getMarketplaceOrders
发出请求时,从
bean:orderHelper?method=getMarketplaceOrders
收到的响应

orderHelper.getMarketplaceOrders如下所示:-

//processor is a custom JSONProcessor extending Processor
from("jetty:http://localhost:8888/orchestratorservice").process(processor);
from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
public class OrderMainAppTest extends CamelTestSupport {

    @Produce(uri = "direct:getMarketplaceOrders")
    protected ProducerTemplate template;

    @EndpointInject(uri = "bean:orderHelper?method=getMarketplaceOrders")
    protected MockEndpoint resultEndpoint;

    @Test
    public void testSendMatchingMessage() throws Exception {
    String expectedBody = "<matched/>";

    template.sendBody("{\"fromDateTime\": \"2016-01-11 10:12:13\"}");

    resultEndpoint.expectedBodiesReceived(expectedBody);

    resultEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        @Override
        public void configure() {
        from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
        }
    };
    }
}
public OrderResponse getMarketplaceOrders(GetMarketplaceOrdersRequestParam)引发异常

我的测试类如下所示:-

//processor is a custom JSONProcessor extending Processor
from("jetty:http://localhost:8888/orchestratorservice").process(processor);
from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
public class OrderMainAppTest extends CamelTestSupport {

    @Produce(uri = "direct:getMarketplaceOrders")
    protected ProducerTemplate template;

    @EndpointInject(uri = "bean:orderHelper?method=getMarketplaceOrders")
    protected MockEndpoint resultEndpoint;

    @Test
    public void testSendMatchingMessage() throws Exception {
    String expectedBody = "<matched/>";

    template.sendBody("{\"fromDateTime\": \"2016-01-11 10:12:13\"}");

    resultEndpoint.expectedBodiesReceived(expectedBody);

    resultEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        @Override
        public void configure() {
        from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
        }
    };
    }
}
我猜这是因为我无法将OrderHelper传递到camel测试上下文。有人能告诉我如何在模拟结果端点中注入bean吗

编辑:-

我尝试如下修改我的测试类:-

    public class OrderMainAppTest extends CamelTestSupport {

        protected OrderHelper orderHelper = new OrderHelper();

        @Produce(uri = "direct:getMarketplaceOrders")
        protected ProducerTemplate template;

        @EndpointInject(uri = "mock:intercepted")
        MockEndpoint mockEndpoint;


        @Before
        public void preSetup() throws Exception {
        orderHelper.setProducer(template);
        };

        @Test
        public void testSendMatchingMessage() throws Exception {

        GetMarketplaceOrdersRequest request = new GetMarketplaceOrdersRequest();
        request.setFromDateTime("2016-01-11 10:12:13");
        request.setApikey("secret_key");
        request.setMethod("getMarketplaceOrders");
        request.setLimit(10);
        request.setOffset(2);

        template.sendBody(request);
        mockEndpoint.expectedBodiesReceived("{\"success\":\"false\"");
        }

        @Override
        protected RouteBuilder createRouteBuilder() {
        return new RouteBuilder() {
            @Override
            public void configure() {
interceptSendToEndpoint("bean:orderHelper?method=getMarketplaceOrders")
        .to("mock:intercepted");            from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders");
            }
        };
        }

        @Override
        protected JndiRegistry createRegistry() throws Exception {
        return getRegistry();
        }

        protected JndiRegistry getRegistry() {
        JndiRegistry jndi = new JndiRegistry();
        jndi.bind("orderHelper", orderHelper);
        return jndi;
        }
    }

上面的代码正确地发出了请求,并且正确地通过了我的应用程序。但是我无法截获orderHelper.getMarketplaceOrders的响应。上面的代码只截取请求。我尝试更改为
template.requestBody(request)
。但是仍然不走运。

此错误意味着您无法将
bean:
端点注入
MockEndpoint

如果要“截获”对
OrderHelper
的调用,可以在路由中使用
interceptSendToEndpoint

@EndpointInject(uri = "mock:intercepted")
MockEndpoint mockEndpoint;

...

@Override
protected RouteBuilder createRouteBuilder() {
  return new RouteBuilder() {
    @Override
    public void configure() {

      interceptSendToEndpoint("bean:orderHelper?method=getMarketplaceOrders")
        .to("mock:intercepted");

      from("direct:getMarketplaceOrders")
        .to("bean:orderHelper?method=getMarketplaceOrders");
  }
};

请参见:

,方法是更新my
createRouteBuilder
,如下所示。我能够截获响应并将其发送到模拟端点,在那里我可以进行断言

@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
    @Override
    public void configure() {
    from("direct:getMarketplaceOrders").to("bean:orderHelper?method=getMarketplaceOrders").onCompletion()
        .to("mock:intercepted");
    }
};
}

我不明白:你从来没有在你的测试中实例化过OrderMainApp,你是如何“测试它”的?我向您解释了您看到的错误是什么,以及如何修复它:此错误与注册表无关,它以前发生过。无论如何,您无法测试
OrderMainApp.createRegistry
,因为您需要一个camelcontext来创建注册表,而在
CamelTestSupport
中,您需要一个注册表来创建camelcontext。我给您的答案是相同的。向路由生成器添加一个
interceptSendToEndpoint
,如我的示例所示,如果我在路由生成器
interceptSendToEndpoint(“bean:orderHelper?method=getMarketplaceOrders”)。添加到(“mock:intercepted”)我只能截获传入的请求。实际上,我需要orderHelper.getMarketPlaceOrders的响应,以便在输出上断言。那么,是否有一种方法可以只截获响应/传出消息?请使用
requestBody
而不是
sendBody
:如果我正确地获取了您的响应,我就执行了
模板。requestBody(请求)但我仍然只收到请求