Я пытаюсь на 100% охватить код моего сервиса.Вот метод:
<?php
* Search to public accounts.
*
* @param string $query
*
* @return TwitterResponse
*/
public function search(string $query): TwitterResponse
{
try {
$response = $this->client->getClient()->get(UserEnum::URI_SEARCH, [
'query' => ['q' => $query,]
]);
} catch (ClientException $e) {
$response = $e->getResponse();
}
return new TwitterResponse($response);
}
Это просто ПОЛУЧИТЕ пользователя с Twitter API.
По моему мнению, я должен разработать два теста: один для попытки, а другой для улова.Ниже приведен мой тест для попытки.
<?php
/**
* @return void
*/
public function setUp(): void
{
$this->prophet = new Prophet();
$this->client = $this->prophet->prophesize(Client::class);
$this->client->get(Argument::any(), Argument::any())->willReturn(new TwitterResponse(new Response()));
$this->client->post(Argument::any(), Argument::any())->willReturn(new TwitterResponse(new Response()));
$this->twitterClient = $this->prophet->prophesize(TwitterClient::class);
$this->twitterClient->getClient()->willReturn($this->client);
$this->userService = new UserService($this->twitterClient->reveal());
}
/**
* Tests if a TwitterResponse is returned with status HTTP_OK.
*
* @return void
*/
public function testGetOk(): void
{
$actual = $this->userService->get('');
$this->assertEquals(get_class($actual), TwitterResponse::class);
$this->assertEquals(HttpResponse::HTTP_OK, $actual->getStatusCode());
}
Ниже приведено покрытие кода get ().
Как видите, я не проверял случай улова.Как мне это сделать ?Я уже пытался подделать HTTP-ответ 404 поймать что-то, но это не сработало.У вас есть представление о том, как я могу это сделать?
Спасибо.
РЕДАКТИРОВАТЬ: я пытался это для случая ловли ->
public function testGetKo(): void
{
$response = new TwitterResponse(new Response(HttpResponse::HTTP_NOT_FOUND));
$response->setStatusCode(HttpResponse::HTTP_NOT_FOUND);
$this->client = $this->prophet->prophesize(Client::class);
$this->client->get(Argument::any(), Argument::any())->willReturn($response);
$this->twitterClient = $this->prophet->prophesize(TwitterClient::class);
$actual = $this->userService->get('');
$this->assertEquals(get_class($actual), TwitterResponse::class);
$this->assertEquals(HttpResponse::HTTP_NOT_FOUND, $actual->getStatusCode());
}
Phpunit возвращает: Не удалось утверждать, что 200 совпадений ожидается 404. Кажется, что мой фиктивный клиент не работает хорошо.