我目前正在开发基于OSGi模型的应用程序.我的应用程序的所有测试过程都是通过使用Pax-Exam来完成的,它使用Karaf创建一个新的JVM.
我尝试使用Jacoco进行集成测试代码覆盖,但似乎没有用.当我使用它(使用maven插件)时,创建的jacoco.exec文件为空.
由于Pax-Exam正在创建一个新的JVM来通过Karaf进行测试,我使用javaagent设置了一个Pax-Exam选项,以便为将要进行测试的新JVM使用完全相同的arg行.不幸的是,它不起作用.
我已经尝试使用没有所有Pax-Exam/Karaf/OSGi部分的Jacoco并且它运行良好,但我不知道如何使它与我的OSGi包一起工作.
我希望有人可以帮忙!
我在Tomcat上部署了一个Web应用程序.在我进一步了解详细信息之前,请先详细说明.
版本:jdk 1.7,Tomcat - 7.0.19,jacoco -0.5.6
我已将jdk1.7添加到Tomcat.在我添加的\ apache-tomcat-7.0.19\bin\startup.bat文件中.
SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0
Run Code Online (Sandbox Code Playgroud)
我还添加了jacoco代理到Tomcat.在apache-tomcat-7.0.19\bin\catalina.bat中我添加了.
SET JACOCO=-javaagent:<my download folder>\jacoco-0.5.6.201201232323\lib\jacocoagent.jar=destfile=C:\jacoco.exec,append=true,includes=*
set JAVA_OPTS=%JAVA_OPTS% %JACOCO%
Run Code Online (Sandbox Code Playgroud)
现在,当我启动Tomcat并点击我的Web应用程序时,正如预期的那样,有一个C:\ jacoco.exec文件.
我现在已将代码移动到以下目录结构jacoco.exec/bin// coveragereport
现在我使用了http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java上的类ReportGenerator .我在/ coveragereport目录中收到了大量HTML格式的报告.但是,所有代码都显示为未触及.虽然在我启动了Tomcat之后,我已经去了http:// localhost:/并浏览了一下.我希望得到覆盖百分比报告.
我遗漏了一些非常基本的东西.请帮忙.
我遇到了dalvik dex转换器和它用于调用方法的操作码的问题.基本上我有一个private final在我的类中定义的方法,并且在调用它时,而不是生成invoke-direct操作码,dx正在生成invoke-super.因为它是私有方法,所以超类上不存在该方法,因此我在设备上遇到VFY违规.我能够找到触发此事件的确切方案,并且似乎在以下情况下发生:
--target 1.6如果满足这两个条件,则生成的dex类invoke-super代替invoke-direct.如果我禁用JaCoCo OR,如果我编译--target 1.5,它使用正确的invoke-direct操作码.
在查看javap反汇编的类代码时,我可以看到导致dx超级而不是直接的原因:
没有检测,编译为1.6:
$ javap -d com.example.ClassName | grep waitForConnectivity
159: invokespecial #115; //Method waitForConnectivity:()V
$ dexdump -d classes.dex | grep waitForConnectivity
147ad8: 7010 6042 0200 |001e: invoke-direct {v2}, Lcom/example/ClassName;.waitForConnectivity:()V // method@4260
Run Code Online (Sandbox Code Playgroud)
检测,编译为1.5(--target 1.5):
$ javap -d com.example.ClassName | grep waitForConnectivity
235: invokespecial #115; //Method waitForConnectivity:()V
$ dexdump -d classes.dex | …Run Code Online (Sandbox Code Playgroud) 有没有人试过配置JaCoCo来将单元和集成测试的覆盖范围转储到2个不同的文件中,让SONAR使用它们,使用ANT构建?
我有一个Jenkins Job,它在一个由几个模块组成的Maven项目上运行SonarRunner.配置SonarRunner导入Cobertura覆盖率报告时,构建失败.
SonarQube Runner 2.4
Java 1.7.0_55 Oracle Corporation (64-bit)
Windows 7 6.1 amd64
INFO: Error stacktraces are turned on.
INFO: Runner configuration file: C:\Jenkins\tools\hudson.plugins.sonar.SonarRunnerInstallation\Sonar_Runner\conf\sonar-runner.properties
INFO: Project configuration file: NONE
INFO: Default locale: "en_US", source code encoding: "windows-1252" (analysis is platform dependent)
INFO: Work directory: C:\Jenkins\workspace\Sprint3\Application\.sonar
INFO: SonarQube Server 4.3
11:07:44.407 INFO - Load batch settings
11:07:44.609 INFO - User cache: C:\.sonar\cache
11:07:44.625 INFO - Install plugins
11:07:44.765 INFO - Install JDBC driver
11:07:44.781 WARN - H2 database should be …Run Code Online (Sandbox Code Playgroud) 测试运行失败时,我们可以获得jacoco报告吗?
谢谢,
这可能是一个相当简单的问题,但我很茫然。
我有一个if语句,如下所示:
if(TheEnum.A.equals(myEnum) || TheEnum.B.equals(myEnum))
Run Code Online (Sandbox Code Playgroud)
TheEnum可以A,B,C,... G(不止4个选项)。
JaCoCo(SONAR)告诉我这里有四个条件。那些是什么?从本质上讲,我不是可以测试的整套设备
if(true || not_evaluated) => true
if(false || true) => true
if(false || false) => false
Run Code Online (Sandbox Code Playgroud)
我敢肯定我不能专门测试
if(true || true)或
if(true || false),因为短路评估不会那么远...?
如果是这样,JaCoCo / Sonar要我测试的第四个选项是什么?
我如何inputStream.close()从pom.xml或Java代码中的jacoco代码覆盖率中排除?
public void run() {
InputStream inputStream = null;
try {
inputStream = fileSystem.newFileInputStream(file);
}
finally {
if(inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我们正在尝试使用JaCoCo报告针对预打包JAR文件的测试代码覆盖率。为此,我们使用java -jar附加参数启动JAR文件:
-javaagent:${project.basedir}/tools/jacocoagent.jar=output=tcpserver,port=${jacoco.port}
Run Code Online (Sandbox Code Playgroud)
JaCoCo的Maven插件配置为转储执行文件并报告结果:
-javaagent:${project.basedir}/tools/jacocoagent.jar=output=tcpserver,port=${jacoco.port}
Run Code Online (Sandbox Code Playgroud)
这样做的目的jacoco.exec是生成一个非零大小(〜350kB)的文件。
但是该报告没有显示任何内容。通过“会话”链接,我可以看到列出的JAR中的类,但是报告的主页显示了这一点:

根据日志,我们似乎正在执行代码。JaCoCo设置中缺少步骤还是应该起作用?
可以在SonarQube中获取非主分支的代码覆盖率详细信息吗?我看到的其他分支的唯一两个标签是Issues和Code。我为每个分支运行相同的Gradle JaCoCo / Sonar命令:
./gradlew report sonarqube -Dsonar.branch.name=${BITBUCKET_BRANCH} -Dsonar.organization=${SONARQUBE_ORG} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${SONARQUBE_KEY}
Run Code Online (Sandbox Code Playgroud)
我正在使用PowerMockito,所以我需要报告任务完成的类检测。
我们将Java,Gradle和JaCoCo与Sonar结合使用。