JACOCO-FAQ中文文档翻译-有道版

原文链接 https://www.jacoco.org/jacoco/trunk/doc/faq.html

这是JaCoCo用户以前问过的问题的汇编。
X功能什么时候发布?

JaCoCo是由志愿者在业余时间维护的。
由于我们不能保证免费容量,我们不承诺特定的发布日期。
通常情况下,您可以期待每年发布几个版本。

在变更日志中,您可以看到在主分支中实现的所有特性,这些特性将在下一个版本中可用。
在此期间,您可以测试主分支(Maven SNAPSHOT)的最新构建并向我们提供反馈。
JaCoCo有[Eclipse|Netbeans|Whatever…]的插件吗?

有关与各种工具的当前集成,请参阅此列表。
JaCoCo支持哪些Java版本?

JaCoCo支持1.0到20版本的Java类文件。
但是,JaCoCo运行时(例如代理)和JaCoCo工具所需的最低JRE版本是1.5。
还要注意,1.6及以上版本的测试类文件必须包含有效的stackmap帧。
为什么我得到错误“不能添加不同的类与相同的名称”?

为了生成覆盖率报告,组中的所有类必须具有唯一的名称。
如果在生成报告时为JaCoCo提供了多个具有相同名称的不同类文件,则会出现此错误。
要解决此问题,请删除这些重复的类,或为每个版本创建单独的报告或报告组。

带有异常的源代码行没有显示覆盖率。
为什么?

JaCoCo通过所谓的探针确定代码执行。
探头插入到控制流的特定位置。
当执行后续探测时,代码被视为已执行。
在异常的情况下,这样的指令序列在中间的某个地方被终止,相应的源代码行没有被标记为覆盖。
为什么覆盖率报告不显示线路覆盖率数字?

JaCoCo基于类文件分析。
要计算行覆盖率,类文件必须包含行号属性。
为此,必须使用调试信息编译代码。
为什么覆盖率报告不显示高亮显示的源代码?

要在JaCoCo覆盖报告中突出显示源代码,请确保满足以下先决条件:

类文件必须使用包含行号的调试信息进行编译。
源文件必须在报告生成时正确提供。
也就是说,指定的源文件夹必须是定义Java包的文件夹的直接父文件夹。

为什么一个类虽然已经执行了,但显示为未覆盖?

首先,确保收集了执行数据。
为此,选择HTML报告右上角的Sessions链接,并检查所讨论的类是否被列出。
如果它被列出但没有链接,则在执行时该类是一个不同的类文件。
确保在运行时使用与生成报告完全相同的类文件。
注意,一些工具(例如EJB容器、mock框架)可能会在运行时修改您的类文件。
请参阅有关类id的详细讨论章节。

为什么在覆盖率报告中没有显示抽象方法?

抽象方法不包含代码,因此无法评估代码覆盖率。
实际上,代码覆盖率记录了实现这些方法的子类。
这同样适用于接口中的非默认方法。
我可以在不停止JVM的情况下收集覆盖率信息吗?

是的,有三种可能的方法:可以配置JaCoCo代理,以便通过TCP/IP套接字进行远程控制。
这允许在任何时间点从运行的JVM收集执行数据。
转储Ant任务、转储Maven目标和命令行接口可用于请求转储。
远程控制功能还允许您重置执行数据。

另外,还可以配置JaCoCo代理,通过JMX公开某些功能(JMX =true)。
豆子组织。
jacoco:type=Runtime提供转储和重置任意时间点执行数据的操作。

此外,JaCoCo还提供了一个Java API,可以直接访问执行测试的JVM中的运行时。
我的代码使用反射。
为什么我用JaCoCo执行它时会失败?

为了收集执行数据,JaCoCo检测被测类,并向类中添加两个成员:私有静态字段 j a c o c o D a t a 和私有静态方法 jacocoData和私有静态方法 jacocoData和私有静态方法jacocoInit()。
两个成员都被标记为合成的。

请更改代码以忽略合成成员。
这是一个很好的实践,因为Java编译器在某些情况下也会创建合成成员。
为什么在检测某些Java类时会出现错误?

JaCoCo只能检测有效的类文件。
具有语法或语义错误的类文件通常会导致异常。
在某些方面,JaCoCo比JVM更严格:JaCoCo期望在1.6或更高版本的类文件中有效的所谓“堆栈映射帧”信息。
反过来,JaCoCo插装类也应该符合规范。

无效的类文件通常是由一些框架创建的,这些框架在操作字节码时没有正确地调整堆栈映射帧。

JaCoCo是否运行在IBM JRE J9和WebSphere上?

它的功能。
要使JaCoCo代理工作,请设置虚拟机选项-Xshareclasses:none。
为什么我得到一个NoClassDefFoundError或ClassNotFoundException类org.jacoco.agent[…]离线?

如果使用脱机插装,插装的类将直接依赖于JaCoCo运行时。
因此,相同JaCoCo版本的jacocoagulent .jar必须位于类路径中,并且可以被工具化的类访问。
为什么我在代码覆盖率分析期间得到StackOverflowError ?

这有两个已知的原因:

错误配置:如果配置两个不同版本的JaCoCo代理,它们将相互检测,并导致无休止的递归。
检查有效的java命令行,避免这样的配置。
大量的堆栈使用:JaCoCo插装通过向每个方法添加一个局部变量来增加少量的运行时开销。
如果您的应用程序已经接近最大堆栈大小,这可能最终导致StackOverflowError。
使用-Xss JVM选项增加最大java堆栈大小。

为什么我在JaCoCo代理配置中排除了类,却在覆盖率报告中看到了它们?

JaCoCo代理的包括和排除选项决定收集哪些类的执行数据。
除了技术上的特殊情况外,这些选项通常是不需要的。
如果排除类,则不会收集它们的执行数据。

报告创建是一个单独的步骤,其中显式地提供了应该显示在报告中的所有类文件。
覆盖率是根据提供的执行数据确定的。
如果缺少特定类的执行数据,则该类将显示为未覆盖,因为报告生成器无法区分该类是被排除在检测之外还是未执行。

如果您想从报告中排除类,请相应地配置相应的报告生成工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值