什么是变异测试?
变异测试,英文Mutation Testing,是使用变异器 (切换数学运算符,更改返回类型,删除调用等)将代码修改为不同的变异(基于变异器创建新代码),并检查单元测试是否失败。好的单元测试应该使所有突变都失败(杀死)。
所以,变异测试的有效性可以衡量杀死了多少个突变。
变异测试是覆盖率的一个很好的补充。相比覆盖率,它能够使单元测试更加健壮。
执行变异测试
在执行变异测试前需要先执行单元测试,不然变异测试有可能找不到单元测试类。
- 找到对应模块下的pitest插件:
注: 如果是要执行指定某个包路径下所有类的单元测试变异测试,则通过targetClasses和targetTests的模糊匹配,比如这样:
com.xxx.util.* testng
- 找到插件双击 "pitest:mutationCoverage"即可运行变异测试。运行完成后,会自动生成变异测试报告,报告位置一般在对应模块的target/pit-reports目录下: 报告会详细列出每个包、每个类的覆盖率,变异通过率等。
从上面很明显可以看到我的单元测试其实并没有写得完整,我们看看里面哪些变异详细报告:
如果我的单元测试加上边界测试:
再次执行,变异测试全覆盖了!