public function testItReturnsManyMessagesInTheCorrectOrder() { $instanceOne = $this->fileQueue; $instanceTwo = $this->createFileQueueInstance(); $nMessages = 1000; for ($i = 0; $i < $nMessages; $i++) { $writeQueue = $i % 2 === 0 ? $instanceOne : $instanceTwo; $writeQueue->add($this->createTestMessageWithName('message_' . $i)); } $receiveCallCount = 0; $this->mockMessageReceiver->expects($this->exactly($nMessages))->method('receive')->with($this->callback(function (Message $message) use(&$receiveCallCount, $nMessages) { $expected = 'message_' . $receiveCallCount++; if ($receiveCallCount > $nMessages) { // Workaround https://github.com/sebastianbergmann/phpunit-mock-objects/issues/261 $expected = 'message_' . ($receiveCallCount - 2); } return $expected === $message->getName(); })); for ($i = 0; $i < $nMessages; $i++) { $readQueue = $i % 2 === 1 ? $instanceOne : $instanceTwo; $readQueue->consume($this->mockMessageReceiver, 1); } }
public function consume(MessageReceiver $messageReceiver, int $maxNumberOfMessagesToConsume) { while ($this->isReadyForNext() && $maxNumberOfMessagesToConsume-- > 0) { $messageReceiver->receive($this->next()); } }