Slide 86
Slide 86 text
86
外部接続を行うメソッドの場合(mockの活用方法)
tests/Unit/Libraries/Api/ForecastTest.php
class ForecastTest extends TestCase
{
public function test_loadOverviewText()
{
$mock = Mockery::mock('overload:\GuzzleHttp\Client');
$mock->shouldReceive('request->getStatusCode')
->once()
->andReturn(200);
$mock->shouldReceive('request->getBody->getContents')
->once()
->andReturn($this->getDummyJson());
$f = new Forecast();
$code = 12345;
$result = $f->loadOverviewText($code);
$this->assertEquals(json_decode($this->getDummyJson(), true)['text'], $result);
}
private function getDummyJson()
{
return json_encode(
[
"publishingOffice" => "気象庁",
"reportDatetime" => "2023-06-19T16:37:00+09:00",
"targetArea" => "東京都",
"headlineText" => "",
"text" => "概要のダミーテキスト "
]
);
}
}
実コード内で利用する箇所をモックし、ロジックに
支障が出ないようにする
アサーションとは異なり、ロジックを動かす前に
モックの設定を行う
実コード
public function loadOverviewText($code)
{
$client = new \GuzzleHttp\Client();
$response = $client->request(
'GET',
$this->makeOverviewUrl($code)
);
if ($response->getStatusCode() != 200) return '';
$jsonObj = json_decode(
$response->getBody()->getContents(), true
);
return $jsonObj['text'];
}