Как смоделировать Symfony HttpClient как зависимость? - PullRequest
1 голос
/ 01 мая 2020

У меня есть класс, в который я добавляю экземпляр Symfony\Component\HttpClient\HttpClient в качестве параметра конструктора.

Я смотрю на страницу документации по адресу https://symfony.com/doc/current/components/http_client.html#testing -http-clients-and- ответы , где предлагается использовать $client = new MockHttpClient($responses); в качестве способа создания фиктивного клиента.

Когда я передаю симулированный клиент своему классу, я получаю ошибку:

TypeError: Аргумент 3, передаваемый App\Allocator\Strategy\AbstractStrategy::__construct(), должен быть экземпляром Symfony\Component\HttpClient\HttpClient, экземпляром Symfony\Component\HttpClient\MockHttpClient.

Как получить Mock, который будет удовлетворять ограничению при наборе текста, а также разрешить мне издеваться над ответами?

1 Ответ

2 голосов
/ 01 мая 2020

Вы не должны зависеть от Symfony\Component\HttpClient, но от Symfony\Contracts\HttpClient\HttpClientInterface.

MockHttpClient реализует этот интерфейс, так что в этом случае это правильная замена для инъекции.

Если вы вводите HttpClient, потому что вы хотите использовать фабрику для создания произвольных клиентов во время выполнения, насмешка будет труднее. Но вряд ли это именно то, что вам действительно нужно.

Правильный способ интеграции Http-клиента - это указание типа интерфейса и возможность создания платформы соответствующим клиентом в зависимости от вашей конфигурации.

Это чище (вы зависите от абстракции, а не от конкреции), и поэтому гораздо проще написать тесты для.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...