Mutation Testing:使用正确的测试用例覆盖您的代码(第1部分)


Mutation Testing基础 Mutation Testing的概念是以较小的方式修改代码并验证测试可以检测到该修改。未检测到的修改提示可能缺少哪些测试。

变异程序的后续步骤:

  1. 以较小的方式修改代码(创建突变体)
  2. 执行现有的测试套件(杀死突变体)
  3. 验证至少一个现有测试失败(突变体被杀死)
  4. 如果所有测试都成功(突变体存活),则可能缺少测试用例 但是,为什么我们必须考虑测试修改后的代码的结果 呢?让我们看一个例子:

0-4l8pbwvdtlrnxrcg.png

最初,该系统由两个测试用例完全覆盖。首先,通过失败的测试已检测到两个突变。但是第三个呢?由于两个原因,未检测到最后的修改:

有一个丢失的测试用例。 最后的修改使相同代码的等效版本 不带突变的测试覆盖代码:注册API示例 为了展示突变测试的功能,我们基于简单的线覆盖率(旧的经典方法)创建了测试。要计算线路覆盖率,我们使用JoCoCo插件。

假设我们拥有具有两个功能的客户和注册服务:

注册新客户 检查客户端是否已经注册

0-bp0fy7a89phtrgiw.png 检查测试覆盖率的一种旧的好方法是验证每一行都在测试套件中执行了(至少一次)。让我们看一下默认的测试场景:

0-qbnaydbscoygrpjc.png 0-0ryyq9yncreavluz.png 图片标题

现在,似乎所有案件都算在内了,对吧?要仔细检查,请执行JoCoCo并使用Maven检查代码覆盖率:

mvn clean test

mvn jacoco:report

让我们看看位于target / site / jacoco / index.html文件中的生成的JoCoCo报告

0-2qp8jwystx2vkskn.png

唔。覆盖率似乎是100%。但是我们可以依靠它吗?


原文链接:http://codingdict.com