PHPUnit:自定义引导程序中的类名冲突

时间:2018-04-27 18:40:11

标签: phpunit

我在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的参数时,显然没有。

这里发生了什么以及如何解决?

可接受的备用答案:是否有办法配置测试套件,以便在报告错误或失败的第一个文件或测试目录后停止运行? (这就是我试图用引导程序完成的事情。)

1 个答案:

答案 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>.....