代码之家  ›  专栏  ›  技术社区  ›  pinkgothic sudip

PHPUnit配置(PHPUnit.xml)-在引导中加载?

  •  9
  • pinkgothic sudip  · 技术社区  · 15 年前

    我们在项目中使用了PHPUnit,并且使用了 phpunit.xml 确保 backupGlobals 已关闭。

    为了进一步确保设置了include路径并且自动加载处于活动状态,我们还级联了测试引导。也就是说,每个测试和alltests套件都有一个 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/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">
    

    安慰奖。。。

    backupGlobals="false" 从引导文件,如果有人知道方法。

    (如果没有结果,我将寻求的实际答案可能是复制 phpunit.xml文件 进入所有子文件夹。我想避免这个解决方案,因为它会创建多余的副本,如果我们选择更改设置。。。是啊,哎哟!)

    3 回复  |  直到 11 年前
        1
  •  10
  •   Anti Veeranna    15 年前

    直接回答:不,你不能那样做。

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

    我们这样做:

    • 我们没有这样的测试套件,测试是使用目录分组的,没有AllTests.php任何地方,因为这是不必要的。PHPUnit可以使用目录的名称并在其中运行所有测试。
    • 通过给它或整个测试套件指定一个路径(给目录指定路径),仍然可以运行任何一个测试。它只需要一直从测试根目录中完成,否则将无法工作。

    收益要大得多:管理代码的数量减少了,开发人员不能忘记任何事情,因此结果是一致的。

        2
  •  4
  •   Martin Lyne    13 年前

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

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

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

    我们喜欢从 vim 所以我不得不把这个加到 .vimrc : set shellcmdflag=-ic

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

        3
  •  0
  •   Steven Scott    13 年前

    您可以更新启动脚本(Windows bat文件,或*nix上的shell),并在其中设置逻辑以配置phpunit.xml的位置。如果它在当前目录中,请使用它,否则请指向主目录。

    我也同意Anti-through的观点,即所有测试都应该始终运行,因为您希望确保更改(即使是在目录分支中)不会影响其他代码。所以,一定要从树的顶端跑。这也要求测试执行得很快,但是我对PHPUnit没有什么问题。