我使用Maven(2)Cobertura插件创建代码覆盖率报告,我在方法中使用以下存根:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
}
System.err.println("The program never exited!");

我知道我需要记录异常等,但现在不是重点...... Cobertura拒绝承认打印堆栈跟踪后的行被覆盖。也就是说,System.err.println语句之前带有'}'的行未显示为已覆盖。之前,该方法的结束大括号未显示为覆盖,因此System.err语句。任何想法如何说服cobertura的maven插件,因为System.exit声明被覆盖,结束括号必须被覆盖?

哦是的,我使用模拟安全管理器来抛出安全异常,因为这是我在<=>调用之后让测试继续执行的最简单方法。

有帮助吗?

解决方案

我有一段时间没有使用过Cobertura(2005年?),当时看到了这种行为。 NCover for C#和catch / finally块之后的花括号也存在类似的问题。

我的建议是添加到

其他提示

我会查看报道报告。仔细检查我的测试。请注意,代码确实已被覆盖,并且不用担心达到100%。代码覆盖最好用于查找您可能忽略了测试的区域,但只关注将100%覆盖率作为目标是一种坏习惯,可能导致您跳过需要编写的测试,因为您的工具显示100%。使用该工具可以做什么,但不要陷入让工具定义你所做的事情的陷阱。

我知道这是一个古老的问题,Cobertura已经解决了这个问题,但为了完整性,<!>“;} <!>是由内部自动引起的<!>;最后是<!>块。

请将您的代码视为:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
} finally {
    // noop
}

幸运的是,某些版本不再发生这种情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top