Symfony Phpunit продолжает использовать реальный класс вместо макета

Я использую Symfony 6.4.4, php 8.2.5
Мой класс зависит от другого класса, который отправляет http-запросы микросервису. В целях тестирования я хочу высмеять этот класс.

Структура кода:

interface GatewayServiceInterface
{
    public function sendRequest(): int;
}

class GatewayService implements GatewayServiceInterface
{
    public function sendRequest(): int;
}


final readonly class TestedClass
{
    public function __construct(
      private GatewayServiceInterface $gatewayService,
      private SomeClassA $someClassA,
      private SomeClassB $someClassB
    ) {}
}

Итак, теперь я хочу протестировать TestedClass. И я хочу, чтобы он использовал макет GatewayServiceInterface.
Вот что я делаю

final class TestedClassTest extends WebTestCase

public function setUp(): void
{
    parent::setUp();

    $gatewayServiceMock = $this->createMock(GatewayServiceInterface::class);
    $gatewayServiceMock->method->('sendRequest')->willReturn(200);

    $testedClassWithMock = new TestedClass(
      $gatewayServiceMock,
      $this->container->get(SomeClassA::class),
      $this->container->get(SomeClassB::class)
    )

    $this->container->set(
      TestedClass::class,
      $testedClassWithMock
    );

/** Run some tests with TestedClass */
}

Но когда я запускаю тесты, он по-прежнему использует обычный GatewayServiceInterface вместо MockObject.
Судя по тому, что я прочитал на этом сайте и в документации Symfony, мой код должен работать. Что я могу сделать здесь не так?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение здесь Как имитировать сервис Symfony 2 в функциональном тесте?.

Моя ошибка заключалась в том, что я использовал контейнер ядра вместо контейнера клиента.

Другие вопросы по теме