2012-04-26 79 views
3

我正在開發一個API,我在編寫一些測試用例時遇到了麻煩。 我已經寫了一組通用測試用例來測試所有實體。這些包括一般操作,例如創建,修改和刪除。無法獲得PHPUnit依賴關係

/** 
* @dataProvider provideCreateData 
* @depends LoginTest::testLogin 
*/ 
public function testCreate 

/** 
* @dataProvider provideModifyData 
* @depends testCreate 
*/ 
function testModify 

的的dataProvider提供API實體的名單各自的屬性一起,測試動態測試的所有實體,而無需主我們當有未來變化的測試。

以上目前工作正常,但我有麻煩集成被硬編碼,用於東西,如不遵循通用的模式搜索功能,其他人需要測試。 很明顯,我無法在沒有現有實體的情況下測試find函數,因此find測試需要在創建測試後運行,這是我遇到的麻煩。我試過使用:

/** 
* @depends GeneralTest::testCreate 
*/ 
public function testFind() {} 

哪個不行,測試不運行,而是因爲沒有明顯的原因而跳過。但是,如果我刪除依賴關係,測試運行,但我不能再保證數據庫中會存在實體。

我覺得我缺少明顯的東西,或者也許我誤解了一些重要的概念。

回答

5

消費者測試會被跳過的原因有兩個。

  1. 'testFind'在'GeneralTest :: testCreate'之前定義。 PHPUnit不會更改執行順序以幫助依賴;那是在你身上。
  2. 'GeneralTest :: testCreate'中的斷言失敗。如果斷言失敗,則依賴關係未被滿足,因此該方法被跳過。

,如果你確實需要,才應使用@depends。您應該努力使每種測試方法都測試一個特定的執行路徑。如果你認爲你需要這種依賴性,你需要配置一個測試套件,以便控制測試的順序。

https://phpunit.de/manual/3.7/en/organizing-tests.html#organizing-tests.xml-configuration