PHPUnit: конфликт имени класса в пользовательском загрузчике - PullRequest
0 голосов
/ 27 апреля 2018

Я написал загрузчик около 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 голосов
/ 27 апреля 2018

Вы должны написать файл начальной загрузки, где вам нужен файл, прежде чем требовать autoload.php. А в настройках phpunit.xml вы должны добавить атрибут начальной загрузки с вашим файлом начальной загрузки.

PHPUnitBootstrap.php

require "FilterTest.php"; 
include_once "vendor/autoload.php";

и phpunit.xml

<phpunit bootstrap="PHPUnitBootstrap.php"><testsuites>.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...