Camel Junit 调试 EndpointInject 自动装配(为 null)

chr*_*cnm 4 java spring unit-testing apache-camel

编辑:此问题已解决,见下文

各位骆驼骑手大家好!

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

我尝试使用@EndpointInject,但它们在单元测试期间没有启动。我的@Test方法中的模拟端点为空。

我的测试课开始:

@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = CamelSpringDelegatingTestContextLoader.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@DisableJmx(true)
@MockEndpoints("activemq*")
public class MyTest {
Run Code Online (Sandbox Code Playgroud)

MyTest.java有一个 xml 应用程序上下文文件,其中包括基本的 Camel 上下文和其他内容。它还加载一个@Configuration注入其他服务的 bean spring 类,并进行相应的连接。

我有以下字段想要注入和自动装配

@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;
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

@EndpointInject它工作得很好,但是代码比我预期的要多得多。

我该如何调试这个?在测试时如何正确实例化模拟端点和生产者?我假设这@EndpointInject会神奇地为我设置正确的端点值。这是不正确的吗?

chr*_*cnm 5

如此简单,但又如此困难。我的camelContext没有被命名。

破碎的:

@EndpointInject(uri = "mock://activemq:queue:b", context="camelContext")
protected MockEndpoint eventUpdatesQueue;
Run Code Online (Sandbox Code Playgroud)

只需删除context="camelContext",正如雪莱所写……它就活了。

固定的:

@EndpointInject(uri = "mock://activemq:queue:b")
protected MockEndpoint eventUpdatesQueue;
Run Code Online (Sandbox Code Playgroud)