Java 有没有办法在JUnit测试中使用JMS?

Java 有没有办法在JUnit测试中使用JMS?,java,junit,jboss,jms,cdi,Java,Junit,Jboss,Jms,Cdi,我想使用JMS运行JUnit测试。JUnit测试是否可以在JBoss或CDI容器等应用服务器之外使用JMS 如果发送和使用消息与JMS完全解耦,您可以对其进行模拟 例如:您可以有一个实现类似“IMyClassSender”接口的类。在实际代码(非junit)中,该类所做的只是将消息提交给JMS。在junit中,使用一个接受输入的类实现IMyClassSender,如果提交给JMS,则将其传递给您的使用者类 或者,如果您使用的是active mq:,您也可以重新考虑为此使用应用服务器-Arquil

我想使用JMS运行JUnit测试。JUnit测试是否可以在JBoss或CDI容器等应用服务器之外使用JMS

如果发送和使用消息与JMS完全解耦,您可以对其进行模拟

例如:您可以有一个实现类似“IMyClassSender”接口的类。在实际代码(非junit)中,该类所做的只是将消息提交给JMS。在junit中,使用一个接受输入的类实现IMyClassSender,如果提交给JMS,则将其传递给您的使用者类


或者,如果您使用的是active mq:

,您也可以重新考虑为此使用应用服务器-Arquillian()允许在您选择的JavaEE环境中执行单元和集成测试-并自行管理应用服务器生命周期

为什么要投反对票?这是一个合理的解释question@chrisl08答案是好的。或者,您可以使用嵌入式代理来避免模拟。通过这种方式,您可以在没有任何存根或模拟的情况下测试组件/类之间的集成。这更接近现实生活。这听起来是一个可能的解决方案!嘲笑JMS!关于activemq的一个问题,我需要将activemq库包含到项目中,以便在JUnit中使用它?同样使用activemq,我不需要运行activemq服务器吗?不需要,因为您可以使用
EmbeddedActiveMQBroker
-有关详细信息,请参阅答案中提供的链接,我从未使用过上面链接中描述的方法。我们总是使用“模拟”方法。我只是提供了一个备选答案是的,你的答案很有价值,但阿奎利安有它的细微差别。它的设置相当复杂,其本质是为每个测试创建“微部署”,测试执行相当长,等等……此外,问题明确指出“JUnit测试在应用服务器之外使用JMS”还有一个已知的问题,即Arquillian在测试完成后不释放资源。当您计划在连续部署环境(如Jenkins)中运行测试时,这个问题可能会成为一个阻碍。