我们使用 Spring 进行 DI 和 Camel 进行路由/消息传递。我被要求为我们的各种组件设置一些(JUnit)单元测试(它们都以管道方式将消息相互路由)。
在查看了通用的Camel 测试文档和Camel-Spring 测试文档之后,似乎单元测试骆驼端点的首选方法是通过Spring Test Context Framework使用对象的子类等AbstractJUnit38SpringContextTests
。
我对这些 API 的经验绝对为零。所以,虽然它们读起来很有趣,但我很难把它们放在上下文中(不是双关语)。
因此,我正在努力解决一些初始概念:
一方面,什么时候适合使用 a MockEndpoint
, vs DataSet
, vs 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,那么它上面的代码似乎从一个MockEndpoint
命名的读取所有消息mock:foo
......但我看不到这些消息来自哪里(它们如何到达端点第一名)!
所以我的第二个问题是:确定哪些端点要“存根”(模拟)的标准做法是什么?例如,如果相同的 JMS 消息队列被两个不同 JAR/WAR 中的两个端点使用:一个是生产者,另一个是消费者?在这种情况下,ProducerComponent
(生活在里面producer.war
)是一个将消息推送到的 Camel 端点someQueue
。并且ConsumerComponent
(住在里面consumer.war
)是另一个消费消息的 Camel 端点someQueue
。
SO将如何组织两个组件的单元测试?
提前感谢您在正确方向上的任何推动!