在 PHPUnit 中重新运行上次失败的测试
当其中一个测试失败时,您可以使用 --stop-on-failure
标志来中断单元测试。
有没有什么方法可以快速告诉 PHPUnit 重新运行这个失败的测试,而不是手动提供完整路径?
You may use --stop-on-failure
flag to break the unit testing when one of the tests fails.
Is there any way quick way to tell PHPUnit to re-run this failed test, instead providing the full path manually?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
自 PHPUnit 7.3 起,您可以缓存测试结果,然后按缺陷对测试进行排序。
在 phpunit.xml 中,启用
cacheResults
:如果您不想编辑 phpunit.xml,您还可以使用
--cache-result
标志运行测试。缓存结果时,PHPUnit 将在运行测试后创建一个
.phpunit.result.cache
文件。确保将此文件添加到您的全局 gitignore 文件中。您可以像这样运行测试以首先运行以前失败的测试:
Since PHPUnit 7.3, you can cache the results of your tests, then order your tests by defects.
In phpunit.xml, enable
cacheResults
:If you don't want to edit your phpunit.xml, you could also run your tests with the
--cache-result
flag.When caching results, PHPUnit will create a
.phpunit.result.cache
file after running tests. Make sure to add this file to your global gitignore file.You can run your tests like this to run previously failed tests first:
查看
--filter
cli 选项。您可以在组织文档
和
命令行界面文档
。假设您的运行
phpunit Tests/
和Tests/Stuff/ThatOneTestClassAgain::testThisWorks
失败:您的选项是:
phpunit --filter ThatOneTestClassAgain
和
phpunit --filter testThisWorks
或大多数其他有意义的字符串
Take a look at the
--filter
cli option. You can find an example in theorganisation docs
and in theCLI Docs
.Assume your run
phpunit Tests/
andTests/Stuff/ThatOneTestClassAgain::testThisWorks
fails:your options are:
phpunit --filter ThatOneTestClassAgain
and
phpunit --filter testThisWorks
or most other strings that somehow make sense
我发现实现它的方法相当简单,但需要实现日志记录。您设置 phpunit 来记录到 json 文件。然后将 phpunit 命令更改为类似以下内容:
其作用是在执行 phpunit 之前 auto_prepend 一个 php 文件。这样我们就可以捕获 $argsv 并自动向 phpunit 提供所需的过滤命令。
tests-prepend.php
(请务必修改json日志的文件路径)
The way I've found to implement it is fairly easy, but requires logging to be implemented. You setup phpunit to log to a json file. Then you alter the phpunit command to something similar to:
What this does is auto_prepend a php file before the execution of phpunit. This way we can capture $argsv and supply the required filter command automatically to phpunit.
tests-prepend.php
(make sure to amend the file pathway of the json log)