我正在集成测试使用RabbitMQ客户端(amqp客户端版本5.7.0)和嵌入式Apache Qpid服务器对象的组件。

调用Channel.queuePurge()方法时,将清除队列。我可以使用getMessageCount()方法进行验证。但是queuePurge()方法返回一个PurgeOk对象,该对象始终具有0个消息计数。文档说PurgeOK返回已清除的消息计数。

   //The queue has 1 message.
   int f = getMessageCount();
   //verify message count
   assertEquals(f, 1);
   //purge
   com.rabbitmq.client.AMQP.Queue.PurgeOk purgeOK= channel.queuePurge(queueName);
   //the next test fails.
   //Shouldn't the purgeOK have count 1, to denote that one message was purged?
   assertEquals(purgeOK.getMessageCount(), 1);


仅当使用嵌入式Qpid服务器进行测试时,才会发生这种情况。与实际运行的Rabbit MQ实例相同的测试用例给出了预期的结果。

这是一个已知的问题?有没有更好的方法对清除功能进行单元测试?

最佳答案

这不是一个已知问题,我针对Qpid Broker-J中的此缺陷提出了an issue的问题。感谢您在发现此问题上的帮助。

09-29 22:11