【发布时间】:2011-12-19 17:09:07
【问题描述】:
我们使用 Spring 进行 DI 和 Camel 进行路由/消息传递。我被要求为我们的各种组件设置一些(JUnit)单元测试(它们都以管道方式将消息相互路由)。
在查看了一般的 Camel testing 文档和 Camel-Spring testing 文档之后,似乎单元测试骆驼端点的首选方法是通过 Spring 测试上下文框架使用对象的子类,例如AbstractJUnit38SpringContextTests 等等。
我对任何这些 API 的经验绝对为零。所以,虽然它们读起来很有趣,但我很难将它们放在上下文中(不是双关语)。
因此,我正在努力解决一些初始概念:
首先,什么时候适合使用MockEndpoint、DataSet、Test?
此外,Camel-Spring 文档(上面的链接)提供了以下示例:
@ContextConfiguration
public class MyCamelTest extends AbstractJUnit38SpringContextTests {
@Autowired
protected CamelContext camelContext;
@EndpointInject(uri = "mock:foo")
protected MockEndpoint foo;
public void testMocksAreValid() throws Exception {
// lets add more expectations...
MockEndpoint.assertIsSatisfied(camelContext);
// now lets do some further assertions
List<Exchange> list = foo.getReceivedExchanges();
for (Exchange exchange : list) {
Message in = exchange.getIn();
...
}
}
}
如果我什至开始理解这个 API,那么它上面的代码似乎从名为 mock:foo 的 MockEndpoint 读取所有消息......但我不看看这些消息是从哪里来的(它们是如何到达端点的)!
所以我的第二个问题是:确定哪些端点要“存根”(模拟)的标准做法是什么?例如,如果相同的 JMS 消息队列被两个不同 JAR/WAR 中的两个端点使用:一个是生产者,另一个是消费者?在这种情况下,ProducerComponent(位于producer.war 内部)是一个将消息推送到someQueue 的 Camel 端点。而ConsumerComponent(位于consumer.war 内部)是另一个使用someQueue 的消息的Camel 端点。
SO 将如何组织两个组件的单元测试?
提前感谢您在正确方向上的任何推动!
【问题讨论】:
标签: java unit-testing apache-camel spring-test