【发布时间】:2015-01-18 19:14:24
【问题描述】:
我有这个开关系统,我正在使用 eclemma 来测试分支覆盖率。我们需要对所有内容至少有 80% 的分支覆盖率,所以我正在尝试尽可能多地进行测试。 然而,eclemma 告诉我这个交换机系统在分支覆盖方面没有经过全面测试。
pos = p.getCurrentPosition().substring(0, 1);
switch (pos) {
case "G":
goalkeepers++;
break;
case "D":
defense++;
break;
case "M":
midfield++;
break;
case "F":
offense++;
break;
case "S":
substitutes++;
break;
case "R":
reserves++;
break;
}
我使用简单的 JUnit 测试来处理每种情况。 仍然 eclemma 将此标记为黄色,并表示“19 个分支中有 7 个丢失”。 我想说只有 7 种方法可以通过这个开关系统(6 个单独的案例 + 全部未定义)。
我尝试搜索有关堆栈溢出的类似问题。其中一些具有使用 if/else 进行全面覆盖的解决方案。我不确定这是否是获得此覆盖范围的唯一方法。
谁能解释所有这 19 个分支的来源以及我如何测试剩余的 7 个分支以在此 switch 案例上获得 100% 的分支覆盖率?
【问题讨论】:
-
pos变量 是否有可能获得其他字母值?如果是,添加默认情况。 -
我添加了第一行代码,说明如何定义 pos。正如我所料,添加一个空的默认情况并没有改变任何东西
-
我建议不要测试其他分支。一些构造(另见 Java 7s try with resource)生成的字节码比源代码复杂得多。但是,您可以 100% (ok 99,99%) 确保 JRE 在这方面不会出错。因此,请将您的测试工作重点放在其他地方。
标签: java testing switch-statement code-coverage eclemma