首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加静态成员变量Jacoco测试覆盖率?

如何添加静态成员变量Jacoco测试覆盖率?
EN

Stack Overflow用户
提问于 2015-05-08 10:10:48
回答 4查看 8.3K关注 0票数 14

我有一个课程如下:

代码语言:javascript
复制
public class XConstants {

    public static final int A_TYPE = 1;
    public static final int B_TYPE = 2;
}

我在测试中使用了这两个变量,但是当我用Jacoco检查测试覆盖率时,它显示了这个类的%0测试覆盖率。我的猜测是,这是因为我从来没有实例化这个类,只使用它的静态变量。我尝试创建一个实例,测试覆盖率达到了%100。我怎样才能克服这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-08 10:14:38

JaCoCo根据实际执行的字节码百分比来度量测试覆盖率。声明静态最终原语或字符串常量不会创建要执行的字节码,它只是常量池中的一个条目。这里唯一的字节码是一个隐式默认构造函数,通常如下所示:

代码语言:javascript
复制
aload_0
invokespecial Object.<init>
return

所以当你不叫它的时候,你有0%,当你叫它的时候,你有100%。

我的建议是忽略这个问题。无论如何,你都不应该试图达到100%的覆盖率。毕竟,它不能保证任何事情:即使是100%覆盖的代码也可能包含严重的bug。

票数 14
EN

Stack Overflow用户

发布于 2015-05-08 10:27:58

在我们的项目中,通过创建私有构造函数(来自java.lang.Math的模式),我们克服了类不包含常量的问题:

代码语言:javascript
复制
private XConstants {}

然后使用commons-testing库断言此构造函数是私有的,并调用它以满足覆盖率:

代码语言:javascript
复制
assertUtilityClassWellDefined(XConstants.class)
票数 4
EN

Stack Overflow用户

发布于 2016-03-11 22:10:42

您已经创建了一个类,它可以被实例化,但是您从来没有实例化过它,所以从技术上讲,您没有涵盖这些代码。一个“充满常量的类”的简单解决方案是让它成为一个接口。还请注意,默认情况下,接口中的变量是公共的、静态的和最终的,因此您的代码可以如下所示:

代码语言:javascript
复制
public interface XConstants {
   int A_TYPE = 1;
   int B_TYPE = 2;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30121265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档