【发布时间】:2018-08-07 08:32:59
【问题描述】:
我有一个具有以下功能的课程:
public function get(string $uri) : stdClass
{
$this->client = new Client;
$response = $this->client->request(
'GET',
$uri,
$this->headers
);
return json_decode($response->getBody());
}
如何模拟来自 PHPUnit 的请求方法?我尝试了不同的方法,但它总是尝试连接到指定的 uri。
我试过了:
$clientMock = $this->getMockBuilder('GuzzleHttp\Client')
->setMethods('request')
->getMock();
$clientMock->expects($this->once())
->method('request')
->willReturn('{}');
但这没有用。我能做些什么?我只需要将响应模拟为空。
谢谢
PD : 客户端来自(使用 GuzzleHttp\Client)
【问题讨论】:
-
$this->client是如何初始化的,你是如何通过模拟的? -
你不需要返回一个实现 ResponseInterface 的对象而不是一个字符串吗?否则当你调用
getBody时它会爆炸。 -
当然,你的模拟应该返回一个
ResponseInterface存根,这样getBody才能工作(你也必须模拟这个) -
另外docs.guzzlephp.org/en/stable/testing.html 可能比 PHPUnit 模拟更好
-
我想用phpunit mocks
标签: php laravel mocking phpunit guzzle