可选择抑制代码覆盖率目标验证
参考资料: https://GitHub.com/infection/infection/issues/2440 和 https://GitHub.com/infection/infection/pull/2848 ** 简要摘要: Infection 是一个突变测试工具。它会对项目的源代码进行小的更改(例如,反转 `if` 语句中的条件),运行测试套件并检查测试是否仍然通过。在执行这些操作之前,Infection 需要先运行测试套件,以收集覆盖信息。它通过生成一个新的临时 PHPUnit 配置(基于项目的配置)并调用 PHPUnit 来完成此操作。 Infection 支持 `--filter` 选项,允许用户指定要考虑的文件或目录列表。它只会为这些文件生成突变。如果使用此选项,生成的 PHPUnit 配置将被修改,只列出相关的文件或目录在 `<source><include>` 中。 ** 问题: 如果项目使用 `# [CoversClass()]`/`#[UsesClass()]`,PHPUnit(我认为是版本 12 之后)将在 https://GitHub.com/sebastianbergmann/phpunit/blob/197fc3445df847e7771bd8574e7f55d46fa1e44f/src/Runner/CodeCoverage.php#L228-L256 中对这些属性进行一些验证。由于全面的测试套件正在运行,但配置 `<source>` 中仅包含一小部分源文件,因此在 https://GitHub.com/sebastianbergmann/php-code-coverage/blob/3c97001bca11db4a3e6eee52f6e6924617364c3a/src/Target/Mapper.php#L82 中会抛出异常,并发出"X 不是代码覆盖的有效目标"的警告。这与 `failOnPhpunitWarning="true"`(默认值,并且通常建议使用)结合起来,导致初始测试运行失败,进而导致 Infection 中止运行。 ** 可能的解决方案: 在我链接的问题中探讨了许多选项。TLDR 是,在 Infection 端很难正确处理此问题。最简单的解决方案是向 PHPUnit 添加一个"不要验证代码覆盖目标"的配置选项。PHPUnit 是否会考虑添加此选项?
内容来源: sebastianbergmann/phpunit