2016-08-02 181 views
0

我是单元测试新手,现在尝试使用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或者这个调用可以从任何一种设置功能完成?

回答

0

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

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

您还可以使用注释@expectedException,也有很多事情可以在例外像expectExceptionCode()

更多的测试,你可以找到here

0

既然你没有进行单元测试(你正在做的这种测试是一种验收测试),你不能检查它自身的异常,你会发现一个不好的回应:

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

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

+0

虽然抛出异常,但我实际上在通过邮递员测试时得到错误代码417。这实际上是期望失败。 –