我有一个类,我向其中注入了一个类似于 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?
你不应该依赖 Symfony\Component\HttpClient
但在 Symfony\Contracts\HttpClient\HttpClientInterface
.
MockHttpClient
实现了这个接口,所以在这种情况下,它是一个有效的替代注入。
如果你注入 HttpClient
因为你想在运行时使用工厂来创建任意客户端,所以嘲讽会比较困难。但这不太可能是你真正想要的。
集成Http Client的正确方法是通过接口的类型提示,让框架根据你的配置实例化相应的客户端。
这样更干净(你是依赖于一个抽象而不是具体化),所以ii更容易写测试。