2016-08-02 168 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。這實際上是期望失敗。 –