如何在phpUnit中的所有测试中传播安装和拆卸?

如何在phpUnit中的所有测试中传播安装和拆卸?,phpunit,Phpunit,我有以下测试/文件夹: tests/ ClassOne.test.php ClassTwo.test.php ClassThree.test.php 我考虑过编写一个单独的类,其中包含这些方法,require()每个测试文件中的该文件,并从该类扩展而不是从PHPUnit\u Framework\u Testcase扩展。有更简单的解决办法吗 我无法轻松访问phpunit.xml,因为我的编码框架的CLI工具(Laravel,artisan)处理它的创建。因此,如果有一个不

我有以下测试/文件夹:

tests/ ClassOne.test.php ClassTwo.test.php ClassThree.test.php 我考虑过编写一个单独的类,其中包含这些方法,
require()
每个测试文件中的该文件,并从该类扩展而不是从
PHPUnit\u Framework\u Testcase
扩展。有更简单的解决办法吗


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

放弃并创建基类。这是这种情况下的标准解决方案。它还带来了其他优势,比如一个保存所创建的
静态
断言扩展的好地方


我甚至在努力想出一种替代方法,更不用说更简单的方法了。我所能建议的就是使用一个脚本来扫描每个测试文件,并插入
setUp
tearDown
以及它们的依赖项(如果找不到它们)。但是(IMHO)这是一个复杂得多的解决方案,没有显著的好处。

编写一个基本测试类并从中扩展是最好的方法,这怎么不容易呢?我不喜欢在每个测试文件中都必须编写一个“require”语句。我想使用自动加载,但我的框架不允许这样做。看来我不得不在所有的测试文件中至少复制一行。拥有一个基本的测试类是非常常见的做法。如果你想用一个更干净(但更难)的方法,你可以考虑使用构图。你可以总是使用自动装填,我不能想象任何方式不允许。你可以堆叠自动加载器,因此如果Laravel和PHPUnit的自动加载器不能为你服务,并且你不能修改PHPUnit引导文件,你仍然可以在测试套件中添加你自己的自动加载器。Ocramius,你认为你能提供一段与Laravel兼容的代码来帮助我完成合成吗?具体地说,如果我不在文件的开头编写某种初始化(Bundle::start('name')或其他东西(这将启动自动加载程序),Laravel就不会启动。这与必须使用require语句没有太大区别。我希望完全消除这种重复。 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(); }