编辑:这已解决,请参阅下文
大家好,所有的骆驼骑士!
我正在测试骆驼路线,并尝试自动连线到模拟端点。
我尝试使用@EndpointInject
,但它们未在单元测试期间启动。我的模拟端点在我的@Test
方法中为null。
我的测试课程的开始:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = CamelSpringDelegatingTestContextLoader.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@DisableJmx(true)
@MockEndpoints("activemq*")
public class MyTest {
MyTest.java
有一个xml应用程序上下文文件,其中包含基本的骆驼上下文和其他内容。它还正在加载@Configuration
bean弹簧类,该类注入其他服务,并相应地连接。我有以下要注入和自动接线的字段
@Autowired
private CamelContext camelContext;
@EndpointInject(uri = "mock://activemq:queue:b", context="camelContext")
protected MockEndpoint eventUpdatesQueue;
@Produce(uri = "activemq://queue:a?concurrentConsumers=10", context="camelContext")
protected ProducerTemplate testProducer;
camelContext
正确地自动装配,并且我已经打印出了端点键,并且它们被正确地模拟了。但是eventUpdatesQueue
和testProducer
是null
。我采取了编写代码以实例化所有内容的方式,此方法运行良好:
eventUpdatesQueue = camelContext.getEndpoint("mock://activemq:queue:a", MockEndpoint.class);
Endpoint testProducer = camelContext.getEndpoint("activemq:queue:b?concurrentConsumers=1");
eventUpdatesQueue.expectedMessageCount(1);
Producer producer = testProducer.createProducer();
Exchange exchange = new DefaultExchange(camelContext);
exchange.getIn().setBody(body());
producer.process(exchange);
eventUpdatesQueue.assertIsSatisfied();
哪个工作正常,但是如果
@EndpointInject
可以按我期望的那样工作,则代码要多得多。我该如何调试呢?测试时,如何正确模拟实例端点和生产者?我假设
@EndpointInject
将为我神奇地设置正确的端点值。那不对吗? 最佳答案
如此简单,但是却如此艰难。我的camelContext
没有命名。
破碎:
@EndpointInject(uri = "mock://activemq:queue:b", context="camelContext")
protected MockEndpoint eventUpdatesQueue;
只需删除
context="camelContext"
,就像Shelley所写的那样,它仍然存在。固定:
@EndpointInject(uri = "mock://activemq:queue:b")
protected MockEndpoint eventUpdatesQueue;