[英]How To Use Mockery For Mocking Nested Object Like GuzzleHttp Request
我在 PHP 中有以下代码:
$response = $this->client->request('GET', $path, $requestBody, $headers);
$isRequestSuccess = $response->getStatusCode() === "200";
if ($isRequestSuccess) {
return $response->getBody()->getContents();
}
似乎我成功地为请求创建了一个模拟:
$mockResponse = \Mockery::mock('GuzzleHttp\Psr7\Response');
$clientMock
->shouldReceive('request')
->once()
->withAnyArgs()
->andReturn($mockResponse);
$clientMock->shouldReceive('getStatusCode')->andReturn(200);
但是,我应该如何使用 Mockery 来模拟getStatusCode
?
它应该返回 GuzzleHttp 的Psr7\Response
GuzzleHttp
。
我知道$clientMock
返回值应该分配给一个参数,但是我应该如何模拟
$response->getStatusCode();
和
$response->getBody()->getContents()
如果我要模拟getStatusCode
并返回 200,我会收到以下错误:
Method Mockery_4_GuzzleHttp_Psr7_Response::getStatusCode() does not exist on this mock object
它不是$request
,而是$response
,你最好这样命名。 $request 变量包含响应 object 非常令人困惑。
反正,
Mockery::mock(ResponseInterface::class)->shouldReceive('getStatusCode')->andReturn(200);
更深入地观察它,您可能不必在意,该响应被模拟并且无法测试,如果您正确设置模拟,您将进行测试,而不是测试您的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.