用途:变异测试,通过自动引入小幅代码变异来验证测试是否真的能捕获缺陷。常用于发现薄弱或不充分的测试、改进变异得分、设置 Stryker 或 mutmut,而非用于编写单元测试、分析测试坏味道、编写端到端测试、生成测试数据或仅做代码覆盖率。
主要能力:变异体是被自动引入的小改动;测试失败即被杀死(好),测试仍通过即存活(弱测试)。变异得分目标为 80% 以上,90%+ 优秀,80-89% 良好,70-79% 可接受,60-69% 需改进,低于 60% 较差。也可用于识别未验证行为、缺失断言、过于宽松的断言及死代码。
使用方式(TypeScript/JavaScript,Stryker):安装 bun add -d @stryker-mutator/core,配合 Vitest 或 Jest 添加对应 runner;运行 npx stryker run,可用 --incremental 仅改动文件,--mutate "src/utils/**/*.ts" 指定文件,--reporters html,clear-text 生成 HTML 报告。
使用方式(Python,mutmut):安装 uv add --dev mutmut 或 pip install mutmut;运行 uv run mutmut run、results、summary、show、apply、html。
局限与注意:手写测试框架的报告不如 Stryker 和 mutmut 完整,可能无法确认是哪个测试杀死了变异体。常见陷阱包括:较早的检查掩盖目标检查、变异被更早断言拦截、变异表后导入时派生的状态未重建、以及被变异文件实际从未被导入。建议为所有测试后断言失败消息而非仅异常,并加入故意不被捕获的空操作变异作为对照。具体评分、收费与更多高级用法暂未提供。