在PHPUnit中重新运行上次失败的测试

在PHPUnit中重新运行上次失败的测试,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,当其中一个测试失败时,您可以使用--stop on failure标志来中断单元测试 是否有任何快速方法可以告诉PHPUnit重新运行此失败的测试,而不是手动提供完整路径?查看--filtercli选项。您可以在和中找到一个示例 --滤器 仅运行名称与给定模式匹配的测试。模式可以是单个测试的名称,也可以是匹配多个测试名称的正则表达式 假设您的运行phpunit Tests/和Tests/Stuff/thatonestclasseach::testThisWorks失败: 你的选择是: phpun

当其中一个测试失败时,您可以使用
--stop on failure
标志来中断单元测试

是否有任何快速方法可以告诉PHPUnit重新运行此失败的测试,而不是手动提供完整路径?

查看
--filter
cli选项。您可以在和中找到一个示例

--滤器

仅运行名称与给定模式匹配的测试。模式可以是单个测试的名称,也可以是匹配多个测试名称的正则表达式

假设您的运行
phpunit Tests/
Tests/Stuff/thatonestclasseach::testThisWorks
失败:

你的选择是:

phpunit——再次筛选一个测试类

phpunit——过滤测试ThisWorks


或者大多数其他字符串都有意义

我发现实现它的方法相当简单,但需要实现日志记录。您可以将phpunit设置为登录到json文件。然后将phpunit命令更改为类似于:

cd /home/vagrant/tests && php -d auto_prepend_file=./tests-prepend.php /usr/local/bin/phpunit
它所做的是在执行phpunit之前自动预处理一个php文件。通过这种方式,我们可以捕获$argsv并自动向phpunit提供所需的filter命令

测试prepend.php (确保修改json日志的文件路径)

,您可以缓存测试结果,然后按缺陷排序测试

在phpunit.xml中,启用
cacheResults


如果不想编辑phpunit.xml,还可以使用
--cache result
标志运行测试

缓存结果时,PHPUnit将在运行测试后创建一个
.PHPUnit.result.cache
文件。确保将此文件添加到全局gitignore文件中

您可以这样运行测试,以首先运行以前失败的测试:

phpunit --order-by=defects --stop-on-failure

如果您为测试设置了phpunit.xml,那么我创建了一个简短的bash脚本,它将使用上次测试运行的phpunit日志记录,用包含失败测试的类填充这个--filter。只需阅读上面的评论。
phpunit --order-by=defects --stop-on-failure