测试PHPUnit中的异常


Testing Exceptions in PHPUnit

我是单元测试的新手,现在正尝试使用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代码。

您还可以检查响应中的预期错误消息或其他内容。