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