我是单元测试的新手,现在正尝试使用PHPUnit为Laravel应用程序编写一些测试用例。我做了一个基本的测试,如下所示:
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()
等。
您可以在这里找到更多
由于您没有进行单元测试(您正在进行的这种测试是一种验收测试),您无法自行检查异常,您将查找错误的响应:
$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代码。
您还可以检查响应中的预期错误消息或其他内容。