在PHPUnit中测试异常
问题描述:
我是单元测试新手,现在尝试使用PHPUnit为Laravel应用程序编写一些测试用例。我做了一个基本的测试,如下所示:在PHPUnit中测试异常
public function testGetPointsByApp()
{
$this
->json(
'GET',
self::URL.'/'.$value
)
->assertResponseStatus(200)
->seeJson([
'status' => 'success',
])
->seeJsonStructure([
'status',
'message',
'data' => []
]);
}
现在,这是行得通的。但我想知道如何测试无效输入,以及像给定参数一样没有数据的情况。我在每种情况下都会抛出相应的例外,并会添加特定的消息。我如何测试它是否被抛出?
我不想把它包括到这个方法中,并且想写一些其他方法来测试API中的不同场景,比如无效的UUID,没有数据等等。所以每次我都需要调用API url或者这个调用可以从任何一种设置功能完成?
答
我不知道laravel,但在PHPUNIT中,您可以测试是否使用expectException函数引发异常。例如,对于InvalidArgumentException
$this->expectException(InvalidArgumentException::class);
您还可以使用注释@expectedException
,也有很多事情可以在例外像expectExceptionCode()
等
更多的测试,你可以找到here
答
既然你没有进行单元测试(你正在做的这种测试是一种验收测试),你不能检查它自身的异常,你会发现一个不好的回应:
$this
->json(
'GET',
self::URL.'/'.$BAD_VALUE
)
->assertResponseStatus(422)
->seeJson([
/* Whatever you want to receive at invalid request */
])
->seeJsonStructure([
/* Whatever you want to receive at invalid request */
]);
Laravel验证错误返回422 - 不可处理的实体 HTTP代码。
您也可以检查您的预期错误消息或其他内容的响应。
虽然抛出异常,但我实际上在通过邮递员测试时得到错误代码417。这实际上是期望失败。 –