如何在phpUnit中的所有测试中传播setUp和tearDown?

时间:2013-02-09 09:22:20

标签: phpunit

我有以下测试/文件夹:

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扩展。对此有更简单的解决方案吗?

我无法轻松访问phpunit.xml,因为我的编码框架的CLI工具(Laravel,artisan)处理其创建。因此,如果有一个不涉及该文件的解决方案会更好。

1 个答案:

答案 0 :(得分:3)

放入并创建基类。这是这种情况下的标准解决方案。它带来了其他优势,例如保持您创建的static断言扩展的好地方。

我很难提出另一种方法,更不用说更容易了。我所能建议的是使用一个脚本来扫描每个测试文件并插入setUptearDown及其依赖项(如果找不到它们)。但是(恕我直言)这是一个更复杂的解决方案,没有明显的好处。