单元测试中的JMS依赖关系

时间:2011-02-04 22:03:36

标签: java unit-testing spring junit jms

我有一个给定的测试,我想在JUnit中运行。它依赖于代码使用JMS调用的复杂服务,因此在运行JUnit测试时,它将无法访问它。因此,考虑到我需要调用此服务这一事实,什么是存根此服务的最佳方法,以便在运行JUnit测试时调用时返回硬编码响应?

现在它使用JNDI来查找队列,现在使用easymock工作正常,因此spring初始化没有问题。但现在需要从存根服务获得响应队列的响应(非常重要)。

2 个答案:

答案 0 :(得分:1)

您是否考虑在单元测试中使用嵌入式ActiveMQ?

http://activemq.apache.org/how-to-unit-test-jms-code.html

答案 1 :(得分:1)

如何将响应传递到回复队列?我假设通过在某处调用特定的回调方法来实现。谁可以访问该方法?

如果将回复队列传递给存根服务,您可以通过EasyMock捕获它,然后直接调用它上面的方法。在the EasyMock documentation(搜索“捕获”)中非常简要地讨论了这样做的方法。一个简单的例子:

Capture<Queue> replyQueueCapture = new Capture<Queue>();
...
MessageService stubService = createMock(MessageService.class);
stubService.sendMessage(capture(replyQueueCapture));
...
// run the test which indirectly invokes the stub service
...
Queue replyQueue = replyQueueCapture.getValue();
replyQueue.offer(replyMessage);