我们正在使用Spring和ActiveMQ(JmsTemplate)。
我们有一个非常不受欢迎的场景,其中JMS使用者(异步处理消息)抛出异常,但JUnit测试仍然成功完成。
如果在与主测试线程不同的线程上抛出异常,我们怎样才能使所有测试失败?
答案 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.setExceptionListener和AbstractMessageListenerContainer.setErrorHandler JavaDoc。
如果你没有使用MessageListenerContainer而是使用JmsTemplate.receive方法,那么 这个方法应该引发一个未经检查的JmsException。