【问题标题】:Testing Exceptions in PHPUnit在 PHPUnit 中测试异常
【发布时间】:2016-08-02 10:56:02
【问题描述】:

我是单元测试的新手,现在尝试使用 PHPUnit 为 Laravel 应用程序编写一些测试用例。我已经完成了一项基本测试,如下所示:

public function testGetPointsByApp()
{
    $this
        ->json(
            'GET',
            self::URL.'/'.$value
        )
        ->assertResponseStatus(200)
        ->seeJson([
            'status' => 'success',
        ])
        ->seeJsonStructure([
            'status',
            'message',
            'data' => []
        ]);
}

现在这正在工作。但我想知道如何测试无效输入以及给定参数根本没有数据的情况。在每种情况下,我都会抛出相应的异常,它会添加特定的消息。如何测试它是否被抛出?

我不想将它包含在此方法中,并想编写一些其他方法来测试 API 中的不同场景,例如无效 UUID、无数据等。因此,每次我都需要调用 API url 或这个调用可以通过任何类型的设置函数来完成?

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    我不知道 laravel,但是在 PHPUNIT 中,您可以使用 expectException 函数测试是否抛出异常。例如对于 InvalidArgumentException

    $this->expectException(InvalidArgumentException::class);
    

    你也可以使用注解@expectedException,还有很多东西可以在异常中测试,比如expectExceptionCode()等等。

    更多你可以找到here

    【讨论】:

      【解决方案2】:

      由于您没有进行单元测试(您正在执行的这种测试是验收测试),您无法自行检查异常,您将寻找错误的响应:

      $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 代码。

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

      【讨论】:

      • 在抛出异常时,我实际上在通过 Postman 进行测试时收到错误代码 417。实际上是期望失败。
      猜你喜欢
      • 2014-07-07
      • 2015-10-17
      • 2016-04-27
      • 1970-01-01
      • 2011-03-29
      • 2012-03-20
      • 2017-06-18
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多