spryker / mutation-testing
Mutation Testing 的游乐场仓库
Requires (Dev)
- infection/infection: ^0.26.16
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- spryker/code-sniffer: ^0.17.14
This package is auto-updated.
Last update: 2024-09-21 03:37:16 UTC
README
此仓库包含一些示例和工作坊,可用于玩耍和理解 Mutation-Testing。我们使用 Infection 框架,该框架在设置此项目时自动安装。
设置
安装所有依赖项
composer install
使用 PHPUnit 运行测试
不带覆盖率报告的测试
vendor/bin/phpunit
带有覆盖率报告
XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-html tests/output
默认情况下,路径覆盖率是禁用的,要启用它,请运行
XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-html tests/output --path-coverage
使用 Infection 运行测试
出于性能考虑,您应始终使用 --threads=max
选项运行 infection
vendor/bin/infection --threads=max
要查看创建的突变体,您可以运行具有 --show-mutations
(-s
) 选项的命令。
vendor/bin/infection -s --threads=max
简介
Mutation testing 是一种计算测试套件有效性和效率的方法。像 PHPUnit 这样的传统测试框架可以生成基于行的代码覆盖率报告。
覆盖率
我们有三种类型的覆盖率
- 行覆盖率
- 分支覆盖率
- 路径覆盖率
在 PHPUnit 中,您可以在配置文件或通过 CLI 命令行选项启用路径覆盖率。最有效的是路径覆盖率,最无效的是行覆盖率。一条执行的代码行并不意味着所有可能的案例都由测试覆盖。
什么是 Mutation Testing
- 修改测试下的代码
- 让您了解测试质量
- 测试测试套件的有效性
- 每个可能的更改都会产生一个突变体
- 测试会针对突变体执行
- 给您提供更精确的覆盖率(MSI)
测试下的每一行代码都将被分析,并生成代码的可能的排列。有多种方式可以修改代码。以下是一些方法:
- 更改运算符,例如 $a + $b 与 $a - $b
- 删除代码行
- 删除类型转换
- 更改整数值,例如 0 到 1
- 等等
还有更多,请查看 https://infection.github.io/guide/mutators.html 获取概述。
为什么你应该进行 Mutation Testing
- 对测试质量的更高信心
- 找到可能导致代码损坏的代码更改
- 显示真正被覆盖的内容
- 一种代码审查方式
参考
Mutation Testing https://en.wikipedia.org/wiki/Mutation_testing
框架 https://infection.github.io/
Infection 框架所有者 Maks Rafalko 在 PHPKonf 2021 上的演讲:PHP 中的 Mutation Testing https://www.youtube.com/watch?v=aDdXTY372Vo