如何在所有测试完成之前显示失败的 PHPUnit 测试的名称

Rya*_*yan 10 php phpunit

我已将测试分成不同的组,这样除非绝对必要,否则我不会运行最慢的测试。

然而,有些仍然很慢。

因此,我很想在整套测试完成运行之前查看失败或出错的测试的名称。

例如,当前当我运行时phpunit tests/Unit/ --verbose,我看到这样的输出:

PHPUnit 7.5.1 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.14-1+ubuntu16.04.1+deb.sury.org+1 with Xdebug 2.6.0
Configuration: /home/vagrant/Code/myproject/phpunit.xml

........F.....
Run Code Online (Sandbox Code Playgroud)

但即使我看到“F”,我也需要等待很长时间才能看到哪个测试失败了。

我希望能够允许测试继续运行,但同时开始调查该特定测试以了解其失败的原因。

如何?

Gui*_*lla 5

你至少有3个选择:

  1. 添加 --debug 标志(在阅读您的评论后,这似乎不会做您需要的事情,实时显示测试失败的情况)

  2. 创建一个打印机类并将其与 --printer 标志一起使用

  3. 添加 --testdox 标志

很久以前,我必须自己制作打印机,因为我需要显示测试花费的时间。所以基本上我是在打印测试开始的时间、测试的名称以及需要多长时间。您可以使用此代码并根据您的需要进行调整。

您需要创建一个新类(通常在 /tests 目录下)。确保此类扩展 PHPUnit_TextUI_ResultPrinter。然后在 phpunit.xml 文件中添加这些设置

     printerFile="tests/TestDurationPrinter.php"  <-- filename 
     printerClass="TestDurationPrinter   <-- Class you created.
Run Code Online (Sandbox Code Playgroud)

我的打印机看起来像这样:

    类 TestDurationPrinter 扩展 \PHPUnit_TextUI_ResultPrinter
    {
    /**
     * @param PHPUnit_Framework_Test|PHPUnit_Extensions_PhptTestCase $test
     */
    公共函数startTest(PHPUnit_Framework_Test $test)
    {
        $这个->写(sprintf(
            "\n正在运行 '%s::%s'...",
            获取_类($测试),
            $test->getName()
        ));
    }

    /**
     * @param PHPUnit_Framework_Test|PHPUnit_Extensions_PhptTestCase $test
     * @param float $时间
     */
    公共函数 endTest(PHPUnit_Framework_Test $test, $time)
    {
        $这个->写(sprintf(
            “结束并花了 ~ %s 秒。”,
            回合($时间)
        ));
    }
}

就你而言,我认为使用 --testdox 就足够了。如果它不起作用,那么我建议创建您自己的打印机,请记住,您仍然需要访问测试结果(我不知道如何做到这一点),所以您需要谷歌搜索。

我希望这可以帮助你。

编辑:您可以做的另一件事是添加标志

--错误停止
这样一旦出现错误,测试就会停止。还有
--失败时停止
(我想这就是你想要的)。我总是使用两者,因为我的测试套件有大约 800 个测试,整个执行大约需要 3 分钟。