问题标签 [jacoco]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
12819 浏览

gradle - Gradle Jacoco - 覆盖报告包括配置中排除的类

我在一个项目中添加了一组没有测试的源,我不希望它们破坏我的测试覆盖率统计数据。我以以下方式配置了 Jacoco:

但无论如何,在生成报告时,Jacoco 还包含来自org.bla的类

有人能帮我吗 ?

编辑

经过一些调试,似乎所有默认输出都添加到org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories私有方法中org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks

使用此类代码时可见:

所以 - 问题是:是否可以以某种方式覆盖org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks方法,或完全覆盖org.gradle.testing.jacoco.plugins.JacocoPlugin类?

0 投票
3 回答
2373 浏览

maven - Selenium 测试 Jacoco 项目覆盖率

我正在运行我的 selenium 项目模块,它不是主项目的一部分,我使用 Jacoco maven 插件和 surefire 插件运行 selenium 测试,Jacoco 仅提供 selenium 项目的代码覆盖率(执行文件)而不是整个项目......我需要如何配置我的 Jacoco 和 Surefire 以获得外部/整个项目的覆盖?

0 投票
2 回答
10457 浏览

sonarqube - Sonar Jacoco 排除 sonar.jacoco.excludes 导致 0% 覆盖率而不是忽略。

当我写

该软件包未从仪器/报告中排除,覆盖率显示为 0%

为什么是这样 ?

声纳 3.6 版

0 投票
1 回答
484 浏览

android - 使用错误调用操作码的 Dalvik 转换

我遇到了 dalvik dex 转换器及其用于调用方法的操作码的问题。基本上我private final在我的类中定义了一个方法,当调用它时invoke-direct,dx 不是生成操作码,而是生成invoke-super. 因为它是一个私有方法,该方法在超类上不存在,所以我在设备上得到了 VFY 违规。我能够找到触发这种情况的确切场景,它似乎在以下情况下发生:

  1. 使用 JaCoCo 检测类,以及
  2. 用编译的类--target 1.6

如果满足这两个条件,则生成的 dex 类具有invoke-super而不是invoke-direct. 如果我禁用 JaCoCo 或者如果我使用 编译--target 1.5,它使用正确的invoke-direct操作码。

在查看javap反汇编的类代码时,我可以看到dx假设 super 而不是直接的原因:

未检测,为 1.6 编译:

检测,编译为 1.5 ( --target 1.5):

仪表化,为 1.6 编译:

所以不同的是编译的.class文件编译了引用类的完全限定类名的java字节码this(注意“ //Method waitForConnectivity:()V” vs“ //Method com/example/ClassName.waitForConnectivity:()V”)。似乎dx自动假定如果方法名称是完全限定的,它必须使用invoke-super,但如果它不是限定的,它使用invoke-direct.

我的问题是:

  1. 这是 Android 中的dx错误,还是 JaCoCo 中的错误?
  2. 我怎样才能避免这种情况,以便 JaCoCo 检测类可以在我的自动化测试构建中正常工作?

我当前的解决方法是拥有一个 Maven“jacoco”配置文件,并在其中覆盖该${java.version}属性以将其从默认的“1.6”更改为“1.5”。有没有更好的解决方案?

0 投票
1 回答
2514 浏览

java - Jacoco、Maven 和 TestNG(0 测试覆盖率)

我目前正在尝试使用 Maven 和 TestNG 运行 Jacoco。

我还没有下载/安装任何东西。

我尝试将以下内容添加到我的父 POM(也尝试添加到测试包 POM,但仍然没有结果)

当我执行“mvn clean install”或 mvn package 时,输出在根文件夹中显示为“test-output”。我试过在 Maven 中设置“outputDirectory”,但这什么也没做。

我遇到的另一个更大的问题是它没有接受任何 testNG 测试。代码覆盖率为 0。

有人可以帮忙吗?

0 投票
1 回答
1301 浏览

java - arquillian jboss as7 托管和 jacoco - jacoco.exec 文件为空

我有一个部署在 jboss 7.1.3 上并使用 arquillian 进行测试的项目,我正在尝试向它添加代码覆盖率指标。

我正在使用托管容器选项(jboss-as-arquillian-container-managed),现在我刚刚尝试将 -javaagent 参数添加到 arquillian 用于启动 jboss 的 jvm 参数,所以我的 arquillian.xml 看起来像这样:

我 100% 确定这个参数被采纳了,因为 jacoco.exec 文件和 classdumpdir 都被创建了。

问题是 jacoco.exec 文件是空的。jboss 已启动,测试运行并成功完成,jboss 已关闭,classdumpdir 已填充(因此根据 jacoco 规范,这意味着它可以正确找到我的类)但 jacoco.exec 仍然完全为空。

如果我向我自己手动启动的完全相同的 jboss 提供确切的保存javaagent参数,那么一切正常。

我究竟做错了什么?

0 投票
11 回答
121831 浏览

testing - 如何使用 jacoco.exec 报告

我从 jacoco 生成了一份代码覆盖率报告,即jacoco.exec。但是不知道怎么用。。。

我生成它的方式是通过命令行:

然后我得到了 jacoco.exec 报告。我所需要的只是百分比的数量,而且我只使用命令行。有没有办法将此报告转换为可读的 txt 文件?

谢谢大家

0 投票
1 回答
1389 浏览

java - JaCoCo 和 Aspectj

我在 Maven 多模块项目中使用 JaCoCo 并想添加一些 AspectJ 魔法,但在测试运行期间出现以下错误

启动 java.lang.instrument.IllegalClassFormatException:

在此消息下方,堆栈跟踪再次显示:

如何将 jacoco 与 aspectj 一起使用?

0 投票
2 回答
17018 浏览

unit-testing - Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示

我正在尝试为 Java 应用程序项目设置代码覆盖率。

项目名称:NewApp

项目结构:

  • src/java/** (源代码)
  • src/java-test (单元测试 - Jnuit)
  • test/it-test(集成测试)
  • 测试/测试(验收测试)
  • tomcat/*(包含 tomcat 启动/停止脚本)
  • xx/.. 等通常应用程序所需的文件夹。

摇篮版本:1.6

环境:Linux

我有一个正在运行的 gradle 构建脚本,它从构建工件存储库(用于前的工件/maven)获取应用程序(NewApp)依赖项(即应用程序用于构建过程的服务 jar),并构建应用程序。

现在,我想为我的 NewApp 应用程序项目使用 JaCoCo 插件来获得代码覆盖率。

我按照 Gradle/Jacoco 的文档进行操作,但它似乎没有为 jacoco 等创建任何报告/... 文件夹,我可以在其中找到 Jacoco 覆盖报告所做的工作。

我的问题: 1.为了使用单元测试(Junit)获得代码覆盖率,我假设我所要做的就是以下,它不会要求我在运行单元测试之前启动/停止 tomcat(测试任务,即“gradle test” ) 来获得/通过使用单元测试的代码覆盖率。请建议/纠正。代码(仅用于 Gradle jacoco 单元测试部分) - 我使用的是:

对于集成测试:

由于 jacocoTestReport 依赖于测试任务,因此它们将首先被调用,然后最终 jacocoTestReport 将报告它发现的代码覆盖率。

  1. 为了获得集成测试的代码覆盖率,我假设我必须首先启动 tomcat(即在运行/调用集成测试的测试目标之前),然后调用“gradle integrationTest”或“gradle test”任务,然后停止 tomcat——以获取代码覆盖报告。从其他博客文章中,我还发现应该在 tomcat 启动之前设置 JAVA_OPTS 变量来分配 jacoco 代理。

例如:设置 JAVA_OPTS 变量,如:

  1. 作为 Gradle/groovy 的新手——如果涉及到 tomcat 的启动/停止,我不确定我应该在 build.gradle(构建脚本)中编写什么代码才能使上述集成/单元测试正常工作。如果有人可以提供示例脚本来做到这一点,我会尝试。

  2. 当我在 Jenkins 中发布 Jacoco 代码覆盖率时(使用 Jenkins 发布后构建操作发布 Jacoco 报告),我现在没有得到任何代码覆盖率。Jenkins 构建仪表板显示代码覆盖率为 0%(即条形显示全为红色,实际代码覆盖率无绿色)。

需要您的建议才能对此有所了解。

0 投票
20 回答
172189 浏览

maven - 执行 JaCoCo 时出现“由于缺少执行数据文件而跳过 JaCoCo 执行”

我正在使用 Maven 3.0.3、JUnit 4.8.1 和 Jacoco 0.6.3.201306030806,并且正在尝试创建测试覆盖率报告。

我有一个只有单元测试的项目,但我无法运行报告,我反复收到错误:Skipping JaCoCo execution due to missing execution data file当我运行时:

这是我的 pom 的配置方式:

我所有的测试都成功运行。以下是 Maven 的一些输出:

任何想法我缺少什么配置?