在单独的进程中运行测试时,PHPUnit 无法生成代码覆盖率

标签 php unit-testing phpunit xdebug

我遇到了一个问题,在 Google 上找不到解决方案。 当我使用 PHPUnit 和 Xdebug 运行单元测试时,我想进行代码覆盖率。

但是,当我这样做时,我收到此错误:

PHPUnit\Framework\Exception: Fatal error: Uncaught SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException: No code coverage driver available in /Users/theobenoit/Desktop/Antipode.nosync/Sites/wp-framework-core/vendor/phpunit/php-code-coverage/src/Driver/Selector.php:53
   ├ Stack trace:
   ├ #0 Standard input code(43): SebastianBergmann\CodeCoverage\Driver\Selector->forLineCoverage(Object(SebastianBergmann\CodeCoverage\Filter))
   ├ #1 Standard input code(123): __phpunit_run_isolated_test()
   ├ #2 {main}
   ├   thrown in /Users/theobenoit/Desktop/Antipode.nosync/Sites/wp-framework-core/vendor/phpunit/php-code-coverage/src/Driver/Selector.php on line 53

我意识到这是因为在我的一些测试中顶部有这个:

/**
 * @runTestsInSeparateProcesses
 * @preserveGlobalState disabled
 */

当我删除@runTestsInSeparateProcesses时,一切正常,但由于我模拟函数而出现问题。

如果有人遇到过这个问题。

最佳答案

这可能是因为通过 runTestsInSeparateProcesses,PHPUnit 为每个测试启动一个新的 PHP 进程。看起来它在没有加载 Xdebug 的情况下也能做到这一点。

每次测试启动的 PHP 需要与您最初启动 PHPUnit 的 PHP 相同。也许 PATH 中首先有一个不同的 PHP 二进制文件?

如果是这种情况,解决方法是确保“正确的”PHP 位于 PATH 的第一位。

关于在单独的进程中运行测试时,PHPUnit 无法生成代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68541803/

相关文章:

php - 与平均 PHP 不同且有序的结果

php - 多个域上的 Zend Framework

mysql - 用 Jest 模拟 mysql 连接

phpunit - 如何编写行为类似于内置断言的自定义 PHPUnit 断言?

php - ZendFramework 与其他框架的集成

javascript - 看不到 axios 调用后呈现的组件内容

c# - DynamicData - 无法将静态方法移动到另一个类(甚至基类)

unit-testing - 初学者程序员应该使用单元测试吗?

PHPUnit 因 Symfony2 session 而失败

php - 带有准备好的语句的 PDO bindParam() 不起作用