Заменить частный сервис в контейнере Symfony для тестирования - PullRequest
1 голос
/ 21 января 2020

Можно ли заменить частный сервис в контейнере DI? Мне нужно сделать это в моей тестовой среде, чтобы я мог запускать интеграционные тесты, но по-прежнему имитировать HTTP-вызовы внешних API.

Например, у меня есть этот код, который устанавливает макет для HttpClientInterface:

$response = new MockResponse('"some json body"');
$client = new MockHttpClient([$response]);
self::$container->set(HttpClientInterface::class, $client);

// Execute controller / command and perform assertions
// ...

Я уже пытался определить HttpClientInterface как publi c сервис для моей тестовой среды с приведенным ниже конфигом, но это не работает, так как он не создается (это интерфейс).

services:
  Symfony\Contracts\HttpClient\HttpClientInterface:
    public: true

1 Ответ

0 голосов
/ 06 марта 2020

Я решил эту проблему самостоятельно для своего конкретного c случая, создав свой собственный класс MockHttpClient, который не требует установки ответов в конструкторе. Замена службы в контейнере во время выполнения, казалось, была неправильным путем к go, исходя из того, как Symfony намеревался сделать контейнер неизменным

...