【发布时间】:2017-02-07 08:20:57
【问题描述】:
我想使用 JMS 运行 JUnit 测试。是否可以让 JUnit 测试在 JBoss 或 CDI 容器等应用程序服务器之外使用 JMS?
【问题讨论】:
-
为什么投反对票?这是一个合理的问题
-
@chrisl08 答案很好。或者,您可以使用 嵌入式代理 来避免模拟。这样您就可以在没有任何存根或模拟的情况下测试组件/类之间的集成。它更接近现实生活。
我想使用 JMS 运行 JUnit 测试。是否可以让 JUnit 测试在 JBoss 或 CDI 容器等应用程序服务器之外使用 JMS?
【问题讨论】:
您也可以重新考虑为此使用应用服务器 - Arquillian (http://arquillian.org) 允许在您选择的 JavaEE 环境中执行单元和集成测试 - 并自行管理应用服务器生命周期。
【讨论】:
如果消息的发送和消费与 JMS 完全解耦,您可以模拟它。
例如:您可以有一个实现类似“IMyClassSender”的接口的类。在实际代码(非 junit)中,该类所做的只是将消息提交给 JMS。在 junit 中,使用一个接受输入的类实现 IMyClassSender,如果提交给 JMS,它会将其传递给您的消费者类。
或者,如果您使用的是活动 mq:http://activemq.apache.org/how-to-unit-test-jms-code.html
【讨论】:
EmbeddedActiveMQBroker - 有关详细信息,请参阅答案中提供的链接。