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

46scxncf  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(506)

我有一个问题,我无法在谷歌上找到解决方案。当我使用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 一切正常,但也有问题,因为我模拟函数。
如果有人有过这个问题。

jm2pwxwz

jm2pwxwz1#

这可能是因为 runTestsInSeparateProcesses ,phpunit为每个测试启动一个新的php进程。似乎它在没有加载xdebug的情况下就可以做到这一点。
为每个测试启动的php需要与最初启动phpunit的php相同。也许路径中首先有一个不同的php二进制文件?
如果是这样的话,解决方法就是确保“正确”的php在应用程序中处于第一位 PATH .

相关问题