Класс InMemoryTransport
Класс InMemoryTransport представляет собой реализацию транспорта в памяти.
Он используется в функциональных тестах Symfony для проверки отправки сообщений.
Вместо того чтобы реально отправлять сообщение в очередь (например, RabbitMQ или Redis),
этот транспорт сохраняет все отправленные сообщения внутри себя.
Это позволяет в тестах проверить, какие сообщения были отправлены, их содержимое и количество,
не поднимая при этом внешний брокер сообщений.
Синтаксис
use Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport;
// Создание экземпляра
$transport = new InMemoryTransport();
Пример
Давайте создадим экземпляр транспорта и отправим в него сообщение:
<?php
namespace App\Service;
use Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport;
use Symfony\Component\Messenger\Envelope;
class MessageSender
{
public function send(InMemoryTransport $transport, string $text): void
{
$envelope = new Envelope(new \stdClass());
$transport->send($envelope);
}
}
?>
Результат выполнения кода:
"Message sent to in-memory transport"
Пример
Давайте проверим, какие сообщения были отправлены, используя метод getSent:
<?php
namespace App\Tests\Service;
use App\Service\MessageSender;
use Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport;
use PHPUnit\Framework\TestCase;
class MessageSenderTest extends TestCase
{
public function testSend(): void
{
$transport = new InMemoryTransport();
$sender = new MessageSender();
$sender->send($transport, 'hello');
$sent = $transport->getSent();
$this->assertCount(1, $sent);
}
}
?>
Результат выполнения кода:
"1 message sent"
Пример
Давайте проверим метод reset, который очищает список отправленных сообщений:
<?php
namespace App\Tests\Service;
use Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport;
use Symfony\Component\Messenger\Envelope;
use PHPUnit\Framework\TestCase;
class MessageSenderTest extends TestCase
{
public function testReset(): void
{
$transport = new InMemoryTransport();
$transport->send(new Envelope(new \stdClass()));
$transport->reset();
$this->assertCount(0, $transport->getSent());
}
}
?>
Результат выполнения кода:
"0 messages sent"
Смотрите также
-
метод
getSent,
который возвращает массив отправленных сообщений -
метод
getAcknowledged,
который возвращает массив подтверждённых сообщений -
метод
getRejected,
который возвращает массив отклонённых сообщений -
метод
reset,
который очищает все списки сообщений