2013-02-09 81 views
3

我有以下的測試/文件夾中:如何在phpUnit的所有測試中傳播setUp和tearDown?

 
tests/ 
    ClassOne.test.php 
    ClassTwo.test.php 
    ClassThree.test.php 

我有以下setUp()tearDown()方法複製到每一個文件:

 
    public function setUp() 
    { 
     $this->dbTestData(); 
    } 

    public function tearDown() 
    { 
     $this->dbClear(); 
    } 

    private function dbTestData() { 
     // populate the database with a few entries 
     Entities\AutocompleteValue::create(array('field_name' => 'testing1', 'entry_value' => 'Aisforapple')); 
     Entities\AutocompleteValue::create(array('field_name' => 'testing2', 'entry_value' => 'Bisforball')); 
     Entities\AutocompleteValue::create(array('field_name' => 'testing3', 'entry_value' => 'Cisforcat')); 
     Entities\AutocompleteValue::create(array('field_name' => 'testing4', 'entry_value' => 'Disfordog')); 
    } 

    private function dbClear() { 
     DB::table('autocomplete_values')->delete(); 
    } 

我已經考慮寫一個獨立的類包含這些方法,require()那個文件在每個測試文件中,並且從那個類而不是PHPUnit_Framework_Testcase。有更簡單的解決方案嗎?

因爲我的編碼框架的CLI工具(Laravel,artisan)處理它的創建,所以我不能輕鬆訪問phpunit.xml。因此,如果存在不涉及該文件的解決方案會更好。

+0

編寫一個基礎測試課並從中擴展是最好的方法,這不容易嗎? – 2013-02-09 11:16:41

+0

我不喜歡我必須在每個測試文件中寫一個'require'語句。我想使用自動加載,但我的框架不會允許這樣做。所以看起來我被卡在所有測試文件中至少要複製一行。 – 2013-02-09 11:21:09

+1

擁有基礎測試課程是非常普遍的做法。如果你想用更清潔(但更難)的方式,你最終可以考慮使用合成。 – Ocramius 2013-02-09 15:40:33

回答

3

投入並創建基類。這是這種情況下的標準解決方案。它帶來了其他優勢,例如保持您創建的static斷言擴展的好地方。

我正在努力想出一種替代方法,更不用說更容易。我所能建議的就是使用腳本掃描每個測試文件,並在未找到它們的情況下插入setUp,tearDown及其依賴關係。但(恕我直言),這是一個更復雜的解決方案沒有顯着的好處。

相關問題