Я использую 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, мой код должен работать. Что я могу сделать здесь не так?




Решение здесь Как имитировать сервис Symfony 2 в функциональном тесте?.
Моя ошибка заключалась в том, что я использовал контейнер ядра вместо контейнера клиента.