Положение
Мы используем PHPUnit в нашем проекте и используем phpunit.xml
, чтобы обеспечить отключение таких вещей, как backupGlobals
.
Чтобы дополнительно убедиться, что путь включения задан и автозагрузка активна, мы также каскадируем наши тестовые загрузчики. То есть каждый тест и все тесты-комплекты имеют require_once(__DIR__ . '/../bootstrap.php');
вверху, вплоть до уровня базовой папки, где он, очевидно, читает require_once(__DIR__ . '/bootstrap.php');
, и фактический файл начальной загрузки находится.
По сути, наши тесты автономны. Вы можете вызвать любой AllTests.php
в любой папке и любой *Test.php
самостоятельно, и они будут работать с правильной конфигурацией.
За исключением № ' Подожди минутку. '
Это верно только в том случае, если мы либо заставим наших разработчиков использовать phpunit --configuration=path/to/phpunit.xml
, либо они находятся в папке с phpunit.xml
(так что PHPUnit извлекает его из текущего рабочего каталога, когда он выполняется).
Иногда это делает невероятно трудным определить, почему тесты на одной машине разработчика ломаются и почему они работают на другой. Нужно просто забыть, что загрузчик не - единственное, что нам нужно, чтобы иметь ту же тестовую среду. Имейте в виду, что, поскольку вы не могли забыть начальную загрузку, если попытались, потому что она находится в самих тестах, забывая о других настройках, особенно обычно дополнительных, таких как эта (если вы находитесь в папке с phpunit.xml
, она автоматически вытащил), легко.
На самом деле - это случалось несколько раз.
Вопрос
Можно ли указать, какой phpunit.xml
использовать в запускаемом тестовом файле , например, в нашем вездесущем файле начальной загрузки, вместо того, чтобы предварительно передавать его в PHPUnit , будь то с помощью переключателя командной строки или находясь в его каталоге ?
Беглый взгляд на код говорит о том, что ответ отрицательный - конфигурация исправна и, похоже, действительно загружается до того, как тестовые файлы даже извлекаются:
[PHPUnit/TextUI/Command.php]
...
if (isset($this->arguments['configuration'])) {
$configuration = PHPUnit_Util_Configuration::getInstance(
$this->arguments['configuration']
);
$phpunit = $configuration->getPHPUnitConfiguration();
...
Это имеет некоторый смысл, учитывая, что конфигурация может содержать тестовые белые или черные списки.
Действительно, не имеет смысла загружать тестовые фильтры в сам тестовый загрузчик, так что это половина потенциальной конфигурации из окна, но фактические поведенческие флаги PHPUnit ...
[sample of part of our phpunit.xml]
<phpunit
backupGlobals="false"
backupStaticAttributes="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
syntaxCheck="false"
processIsolation="false"
colors="true">
... возможно, за исключением «цветов», мне кажется, что сам тест должен определиться на каком-то уровне.
Утешительный приз за ...
По общему признанию, сейчас я был бы счастлив, зная, могу ли я преподавать PHPUnit backupGlobals="false"
из файла начальной загрузки, если кто-то знает способ.
(Если бесполезный, практический ответ, который я буду преследовать, вероятно, будет копировать phpunit.xml
во все подпапки. Я хотел бы избежать этого решения, так как оно создает избыточные копии, и если мы когда-либо решим изменить настройку ... да, ай!)