我已将测试分成不同的组,这样除非绝对必要,否则我不会运行最慢的测试。
然而,有些仍然很慢。
因此,我很想在整套测试完成运行之前查看失败或出错的测试的名称。
例如,当前当我运行时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”,我也需要等待很长时间才能看到哪个测试失败了。
我希望能够允许测试继续运行,但同时开始调查该特定测试以了解其失败的原因。
如何?
你至少有3个选择:
添加 --debug 标志(在阅读您的评论后,这似乎不会做您需要的事情,实时显示测试失败的情况)
创建一个打印机类并将其与 --printer 标志一起使用
添加 --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 分钟。