PHPUnit配置(phpunit.xml) - 在bootstrap中加载?

pin*_*hic 10 php configuration phpunit bootstrapping

情况

我们在项目中使用PHPUnit并使用a phpunit.xml确保backupGlobals关闭的东西.

为了进一步确保包含路径已设置并且自动加载处于活动状态,我们还会对测试引导进行级联.也就是说,每个测试和alltests-suite都有一个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();
    ...
Run Code Online (Sandbox Code Playgroud)

考虑到配置可以包含测试白名单或黑名单,这确实有一定意义.

实际上,在测试引导程序本身中加载测试过滤器是没有意义的,因此这是窗口中可能配置的一半,但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">
Run Code Online (Sandbox Code Playgroud)

...也许除了'colors'之外,我认为测试本身应该可以在某种程度上决定.

......的安慰奖

不可否认,现在我很高兴知道我是否可以backupGlobals="false"从bootstrap文件中教授PHPUnit ,如果有人知道的话.

(如果没有结果,我将追求的实际答案可能是复制phpunit.xml到所有子文件夹.我想避免该解决方案,因为它创建了冗余副本,如果我们选择更改设置...是的,哎哟!)

Ant*_*nna 10

直接回答:不,你不能这样做.

更长的故事 - 通过改变开发人员的习惯可以更好地解决这类问题.

我们这样做:

  • 所有开发人员总是从测试根目录运行测试,该目录具有唯一的phpunit.xml以及所有必要的配置 - 包括bootstrap,它设置了一个类自动加载器.
  • 我们没有这样的测试套件,测试使用目录分组,没有AllTests.php在任何地方,因为它没有必要.PHPUnit可以使用目录名称并在其中运行所有测试.
  • 它仍然可以通过给出它或整个测试套件的路径来运行任何单个测试(通过给出目录的路径).它必须始终从测试根目录完成,否则它将无法工作.

这样做意味着放弃从任何目录启动PHPUnit的自由,但说实话 - 我觉得这根本不是亏本.

收益更大:管家代码的数量减少,开发人员不会忘记任何事情,因此结果是一致的.


Mar*_*yne 5

我的解决方案是添加一个 bash 函数

function phpu ()
{
  phpunit --colors --bootstrap ~/path/to/bootstrap.php "$@";
}
Run Code Online (Sandbox Code Playgroud)

然后将其添加到所有 dev .bashrc 文件中,他们可以切换到使用它。

我们喜欢从这里打电话给他们,vim所以我必须将其添加到.vimrcset shellcmdflag=-ic

然后添加nmap ;t :! phpu %运行当前所在的测试文件。