编辑:这已解决,请参阅下文

大家好,所有的骆驼骑士!

我正在测试骆驼路线,并尝试自动连线到模拟端点。

我尝试使用@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正确地自动装配,并且我已经打印出了端点键,并且它们被正确地模拟了。但是eventUpdatesQueuetestProducernull

我采取了编写代码以实例化所有内容的方式,此方法运行良好:

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;

09-05 16:46