繁体   English   中英

如何使用嘲弄 Mocking 嵌套 Object 像 GuzzleHttp 请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM