当消费者抛出异常时,如何使JUnit测试失败?

时间:2014-03-23 13:52:52

标签: java spring junit jms activemq

我们正在使用Spring和ActiveMQ(JmsTemplate)。

我们有一个非常不受欢迎的场景,其中JMS使用者(异步处理消息)抛出异常,但JUnit测试仍然成功完成。

如果在与主测试线程不同的线程上抛出异常,我们怎样才能使所有测试失败?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用JUnit的规则机制,使用自定义UncaughtExceptionHandler“包装”每个测试执行,记录任何未捕获的异常,并在记录此类异常时使测试失败。 这里有一个很好的例子:http://blog.cedarsoft.com/2011/12/junit-rule-fail-tests-on-exceptionsfailed-assertions-in-other-threads/

答案 1 :(得分:0)

您可以在Spring的MessageListenerContainer上插入一个获取JMSExceptions的ExceptionListener和一个获取所有其他异常的ErrorHandler。然后你可以测试这个监听器是否收到了什么。

请参阅AbstractMessageListenerContainer.setExceptionListenerAbstractMessageListenerContainer.setErrorHandler JavaDoc。

如果你没有使用MessageListenerContainer而是使用JmsTemplate.receive方法,那么 这个方法应该引发一个未经检查的JmsException。