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是正确自动装配的,我已经打印出了端点密钥,并且它们被正确模拟出来。但是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();
Run Code Online (Sandbox Code Playgroud)
@EndpointInject它工作得很好,但是代码比我预期的要多得多。
我该如何调试这个?在测试时如何正确实例化模拟端点和生产者?我假设这@EndpointInject会神奇地为我设置正确的端点值。这是不正确的吗?
如此简单,但又如此困难。我的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)
| 归档时间: |
|
| 查看次数: |
5369 次 |
| 最近记录: |