我有一个课程如下:
public class XConstants {
public static final int A_TYPE = 1;
public static final int B_TYPE = 2;
}我在测试中使用了这两个变量,但是当我用Jacoco检查测试覆盖率时,它显示了这个类的%0测试覆盖率。我的猜测是,这是因为我从来没有实例化这个类,只使用它的静态变量。我尝试创建一个实例,测试覆盖率达到了%100。我怎样才能克服这个问题?
发布于 2015-05-08 10:14:38
JaCoCo根据实际执行的字节码百分比来度量测试覆盖率。声明静态最终原语或字符串常量不会创建要执行的字节码,它只是常量池中的一个条目。这里唯一的字节码是一个隐式默认构造函数,通常如下所示:
aload_0
invokespecial Object.<init>
return所以当你不叫它的时候,你有0%,当你叫它的时候,你有100%。
我的建议是忽略这个问题。无论如何,你都不应该试图达到100%的覆盖率。毕竟,它不能保证任何事情:即使是100%覆盖的代码也可能包含严重的bug。
发布于 2015-05-08 10:27:58
在我们的项目中,通过创建私有构造函数(来自java.lang.Math的模式),我们克服了类不包含常量的问题:
private XConstants {}然后使用commons-testing库断言此构造函数是私有的,并调用它以满足覆盖率:
assertUtilityClassWellDefined(XConstants.class)发布于 2016-03-11 22:10:42
您已经创建了一个类,它可以被实例化,但是您从来没有实例化过它,所以从技术上讲,您没有涵盖这些代码。一个“充满常量的类”的简单解决方案是让它成为一个接口。还请注意,默认情况下,接口中的变量是公共的、静态的和最终的,因此您的代码可以如下所示:
public interface XConstants {
int A_TYPE = 1;
int B_TYPE = 2;
}https://stackoverflow.com/questions/30121265
复制相似问题