2013-02-09 63 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及其依赖关系。但(恕我直言),这是一个更复杂的解决方案没有显着的好处。

相关问题