Java Apache骆驼测试
我们将Spring用于DI,将Camel用于路由/消息传递。我被要求为我们的各种组件设置一些(JUnit)单元测试(它们都以管道方式将消息路由到另一个组件) 在浏览了一般文档和文档之后,单元测试camel端点的首选方法似乎是通过Spring测试上下文框架,使用对象的子类,如Java Apache骆驼测试,java,unit-testing,apache-camel,spring-test,Java,Unit Testing,Apache Camel,Spring Test,我们将Spring用于DI,将Camel用于路由/消息传递。我被要求为我们的各种组件设置一些(JUnit)单元测试(它们都以管道方式将消息路由到另一个组件) 在浏览了一般文档和文档之后,单元测试camel端点的首选方法似乎是通过Spring测试上下文框架,使用对象的子类,如AbstractJUnit38SpringContextTests和排序 我绝对没有使用这些API的经验。所以,尽管它们能带来有趣的阅读,但我很难把它们放在上下文中(没有双关语) 因此,有几个最初的概念我正在努力解决: 例如,
AbstractJUnit38SpringContextTests
和排序
我绝对没有使用这些API的经验。所以,尽管它们能带来有趣的阅读,但我很难把它们放在上下文中(没有双关语)
因此,有几个最初的概念我正在努力解决:
例如,何时使用模拟端点
、vs数据集
、vs测试
?
此外,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();
...
}
}
}
@ContextConfiguration
公共类MyCamelTest扩展了AbstractJUnit38SpringContextTests{
@自动连线
受保护的上下文和上下文;
@端点注入(uri=“mock:foo”)
受保护的mockfoo;
public void testMocksAreValid()引发异常{
//让我们添加更多的期望。。。
MockEndpoint.Assertessatified(camelContext);
//现在让我们做一些进一步的断言
List=foo.getReceivedExchanges();
用于(交换:列表){
Message in=exchange.getIn();
...
}
}
}
如果我甚至开始理解这个API,那么它上面的代码似乎从名为mock:foo
的MockEndpoint
读取所有消息……但我看不到这些消息来自何处(它们首先是如何到达端点的)
所以我的第二个问题是::确定“存根”(mock)的端点的标准实践是什么?例如,如果生活在两个不同JAR/WAR中的两个端点使用相同的JMS消息队列:一个是生产者,另一个是消费者,该怎么办?在这种情况下,ProducerComponent
(生活在producer.war
中)是一个驼峰端点,它将消息推送到someQueue
。而ConsumerComponent
(生活在consumer.war
中)是另一个骆驼端点,它从someQueue
消费消息
如何组织这两个组件的单元测试?
提前感谢您在正确方向上的任何推动 中的测试章节非常好。我只是扩展了CamelTestSupport,并使用mock作为路由的虚拟输入或输出(我不担心Spring或注入之类的东西)。还有一堆奇特的东西,你可以通过把东西(我忘了它们叫什么)放在组件之间的路径上来模拟失败等等。我强烈推荐这本书,它非常清晰准确 对于第二个问题,我想这取决于您的消息是如何创建的。您可以使用模拟端点从队列中馈送或消费(或两者兼而有之)。在模拟端点中有很多很好的支持来检查消息
CamelTestSupport及其超类有许多有用的方法来创建消息。彻底测试路由的最佳实践。您提到的Camel测试和Spring测试资源可能是最好的起点。现在,是否使用Spring进行测试还取决于您设置路由的方式,即使用SpringXMLDSL或JavaDSL。显然,CamelSpringTestSupport(甚至AbstractJUnit38SpringContextTests)可能更适合前者,对于后者,您可能更喜欢CamelTestSupport。现在回答你的问题: