我有以下测试/文件夹:
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)处理其创建。因此,如果有一个不涉及该文件的解决方案会更好。
答案 0 :(得分:3)
放入并创建基类。这是这种情况下的标准解决方案。它带来了其他优势,例如保持您创建的static
断言扩展的好地方。
我很难提出另一种方法,更不用说更容易了。我所能建议的是使用一个脚本来扫描每个测试文件并插入setUp
,tearDown
及其依赖项(如果找不到它们)。但是(恕我直言)这是一个更复杂的解决方案,没有明显的好处。