Java 消息侦听器未拾取JMS MockTopic消息?

Java 消息侦听器未拾取JMS MockTopic消息?,java,jms,mockrunner,Java,Jms,Mockrunner,我正在尝试编写一个jUnit测试,以显示订阅者的start()函数启动主题的消息侦听器(并且在调用start()之前没有使用消息) 我遇到了一个问题,即在调用start()函数之前放置在主题上的消息在调用start()后不会被处理。调用start()后放置在主题上的消息会立即处理 mocktopictopicwriter=getMockTopic(主题); //发布消息供侦听器拾取 MockObjectMessage objectMessage=新的MockObjectMessage(消息);

我正在尝试编写一个jUnit测试,以显示订阅者的start()函数启动主题的消息侦听器(并且在调用start()之前没有使用消息)

我遇到了一个问题,即在调用start()函数之前放置在主题上的消息在调用start()后不会被处理。调用start()后放置在主题上的消息会立即处理

mocktopictopicwriter=getMockTopic(主题);
//发布消息供侦听器拾取
MockObjectMessage objectMessage=新的MockObjectMessage(消息);
objectMessage.setBooleanProperty(“广播”,true);
topicWriter.addMessage(objectMessage);
//由于订阅服务器尚未启动,消息未被使用
//…断言消息未被处理。。。(**成功**)
//启动订阅服务器/侦听器
subscriber.start();
//…断言主题上的消息已得到处理。。。(**失败**)
//发布消息供侦听器拾取
topicWriter.addMessage(objectMessage);
//…断言消息已被处理。。。(**成功**)
虽然这表明侦听器在start()之前没有运行,但启动消息侦听器应该会导致处理当前主题上的所有消息

我试图通过添加以下内容来确保持久性不是原因:

objectMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
但这没有帮助


实际上,运行该程序似乎表明当前驻留在主题上的消息在start()上处理。有人知道为什么当前在MockTopic上的消息可能无法在start()上处理吗?这是否是MockTopic的一个限制?

我不完全清楚这是否是一个MockTopic问题,但是对于标准JMS,您不会期望启动的侦听器在启动之前接收发布的消息,除非它是一个持久订阅。持久性既不在这里也不在那里。

这是一个很好的观点。我不确定这是否是这个特殊测试的问题,但值得研究。实际订阅设置为持久,但我不确定这是否会正确地进行测试。