我在PHPUnit_TextUI_Command
周围编写了一个引导程序,以便在我不将任何参数传递给phpunit
时运行一系列单独的测试套件。引导程序的要点是这个块:
// this->_default_tests is an array of argument sets.
$runner = new \PHPUnit_TextUI_Command;
if (count($_SERVER['argv']) == 0) {
foreach ($this->_default_tests as $test_arguments) {
$result = $runner->run($test_arguments, false);
if ($result == \PHPUnit_TextUI_TestRunner::FAILURE_EXIT) {
exit;
}
}
} else {
$runner->run($_SERVER['argv'], false);
}
但是,当我运行默认测试时,我遇到了一个主要问题:phpunit
崩溃并出现以下错误:
PHP致命错误:无法声明类MyOrganization \ MyPackage \ Tests \ Unit \ Filters \ FilterTest,因为该名称已在/me/MyOrganization/MyPackage/core/tests/Unit/Filters/FilterTest.php中使用24
我仔细检查了FilterTest.php并确认名称空间声明与预期的名称空间匹配。实际上,当我为我的跑步者指定参数时,这个测试没有问题,因此绕过了我试图实现的默认行为。
PHPUnit定义了一个名为FilterTest
的类。 PHPUnits类和我自己的类之间不应该有任何冲突,事实上,当我指定phpunit
的参数时,显然没有。
这里发生了什么以及如何解决?
可接受的备用答案:是否有办法配置测试套件,以便在报告错误或失败的第一个文件或测试目录后停止运行? (这就是我试图用引导程序完成的事情。)
答案 0 :(得分:0)
您需要在需要autoload.php之前编写需要文件的bootstrap文件。在phpunit.xml设置中,您应该使用引导文件添加属性bootstrap。
PHPUnitBootstrap.php
require "FilterTest.php";
include_once "vendor/autoload.php";
和phpunit.xml
<phpunit bootstrap="PHPUnitBootstrap.php"><testsuites>.....