为什么这些行,例如方法定义(带有修饰符,方法名称,参数等的行)或右括号有时会计入行覆盖范围?
在此特定示例中,它是一个构造函数方法,但并非总是这样:
你能解释一下吗?
这取决于您所使用的覆盖率工具,但是我已经看到一些与您的结果相符的工具。
据我所知,原因是抛出/提前返回vs到达函数的结尾。
请注意,只有带有突出显示的右括号的方法不会返回(任何东西),而是从函数的末尾运行,然后触摸该右括号(以及可能在此处发生的堆栈弹出)。与构造函数相同,该构造函数不会在函数内的任何位置显式返回。
在其他示例中,最后高亮显示的行是执行离开函数的位置。
您可以通过设置一种可以早日返回的方法并在收集覆盖率时仅测试该情况来非常容易地进行测试。用覆盖率测试另一种情况(最后结束),然后将两者进行比较。希望第二个显示突出显示的右括号。
例如:
public class EarlyReturn {
public static void whatHappens(final Boolean path) {
System.out.println("Entering method...");
if (path == null) {
throw new IllegalArgumentException("Must have a path.");
} else if (path) {
System.out.println("Exiting early...");
return;
}
System.out.println("Exiting normally...");
}
}
和:
@RunWith(JUnit4.class)
public class TestEarlyReturn {
@Test
public void testEarly() {
EarlyReturn.whatHappens(true);
}
@Test
public void testNormal() {
EarlyReturn.whatHappens(false);
}
@Test(expected = IllegalArgumentException.class)
public void testThrow() {
EarlyReturn.whatHappens(null);
}
}
您没有提到行/分支覆盖率指标,但是在您的示例中,所有情况下的覆盖率都应为100%(我希望如此)。当然,这仍然取决于工具及其采样方式。我的示例不应具有100%的线路覆盖率,除非您同时运行两个测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句