spryker/mutation-testing

Mutation Testing 的游乐场仓库

dev-master 2022-11-15 11:03 UTC

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

代码覆盖率 https://doug.codes/php-code-coverage