如何模拟Symfony HttpClient作为一个依赖关系?

问题描述 投票:0回答:1

我有一个类,我向其中注入了一个类似于 Symfony\Component\HttpClient\HttpClient 作为构造函数的参数。

我在文档页面上看到 https:/symfony.comdoccurrentcomponentshttp_client.html#testing-http-clients-and-responses。 其中建议使用 $client = new MockHttpClient($responses); 作为创建一个Mock客户端的方法。

当我把模拟客户端传递到我的类中时,我得到了错误。

TypeError: Argument 3 passed to App\Allocator\Strategy\AbstractStrategy::__construct() 必须是 Symfony\Component\HttpClient\HttpClient的实例 Symfony\Component\HttpClient\MockHttpClient 收到了。

如何获得一个既能满足输入约束又能模拟响应的Mock?

php symfony testing symfony4 symfony-http-client
1个回答
2
投票

你不应该依赖 Symfony\Component\HttpClient但在 Symfony\Contracts\HttpClient\HttpClientInterface.

MockHttpClient 实现了这个接口,所以在这种情况下,它是一个有效的替代注入。

如果你注入 HttpClient因为你想在运行时使用工厂来创建任意客户端,所以嘲讽会比较困难。但这不太可能是你真正想要的。

集成Http Client的正确方法是通过接口的类型提示,让框架根据你的配置实例化相应的客户端。

这样更干净(你是依赖于一个抽象而不是具体化),所以ii更容易写测试。

© www.soinside.com 2019 - 2024. All rights reserved.