标签: jacoco

使用assertTrue而不是assertNull时缺少分支

在Java/Junit中,我需要使用某个对象测试null.我可以通过多种方式测试条件,但我一直在使用assertTrue进行大多数测试.当我在assertTrue中检查空值时,EclEmma声明它只测试一个分支.

当我手动将语句解析为变量(比如将结果设置为布尔值并将其传递给assertTrue)时,代码覆盖率在断言上被认为是完整的,而不是在变量初始化行上.

为什么会这样?这是否与Java显然添加的额外字节代码相关,如http://sourceforge.net/apps/trac/eclemma/wiki/FilteringOptions所述?任何解决方案(除了使用其他断言语句).

assertTrue:

assertTrue( myObject == null ); //1 of 2 branches
Run Code Online (Sandbox Code Playgroud)

assertTrue:

boolean test = (myObject == null); //1 of 2 branches missing
assertTrue(test); // complete
Run Code Online (Sandbox Code Playgroud)

assertNull:

assertNull( myObject ) //complete;
Run Code Online (Sandbox Code Playgroud)

junit code-coverage bytecode emma jacoco

17
推荐指数
1
解决办法
2万
查看次数

这三种代码覆盖率分析方法有什么区别?

该声纳页面基本上列出了不同代码覆盖率分析工具采用的各种方法:

  1. 源代码检测(由Clover使用)
  2. 离线字节代码检测(由Cobertura使用)
  3. 即时字节代码检测(由Jacoco使用)

这三种方法是什么,哪种方法效率最高?为什么?如果效率问题的答案是"它取决于",那么请解释原因?

java code-coverage cobertura clover jacoco

17
推荐指数
1
解决办法
5938
查看次数

Tomcat7 Maven插件和JaCoCo

有没有办法使用JaCoCotomcat7-maven-plugin嵌入式实例获取代码覆盖?

jacoco-maven-plugin在我的WAR POM中配置来检测我的单元测试,但我不确定如何将jacoco代理连接到嵌入式Tomcat实例来检测针对Tomcat运行的集成测试.鉴于嵌入了Tomcat实例,我不确定这种方法是否可行.有没有其他方法可以实现这一目标?我可以从使用Tomcat Maven插件切换到使用Cargo获取覆盖范围,但如果可能的话,我宁愿坚持使用Tomcat插件.

以下是我POM的一些相关摘要:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.2.201302030002</version>
    <executions>
        <execution>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.14</version>
    <executions>
        <execution>
            <id>integration-tests</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <systemProperties>
            <!-- as expected, this system property doesn't work since Tomcat is embedded, but this is the type of config I'm looking for -->
            <JAVA_OPTS>-javaagent:${project.build.directory}/${jacoco.jar}=destfile=${project.build.directory}/jacoco.exec,append=true</JAVA_OPTS>
        </systemProperties>
    </configuration>
    <executions>
        <execution>
            <id>tomcat-startup</id>
            <goals>
                <goal>run-war-only</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
                <fork>true</fork>
            </configuration>
        </execution>
        <execution>
            <id>tomcat-shutdown</id>
            <goals> …
Run Code Online (Sandbox Code Playgroud)

java tomcat maven jacoco

17
推荐指数
2
解决办法
9345
查看次数

jacoco的prepare-agent没有生成jacoco.exec文件

我正在运行Jacoco的Maven插件.该prepare-agent目标运行正常,但不会产生jacoco.exec由于某种原因文件.随后report目标抱怨Skipping JaCoCo execution due to missing execution data file.

有任何想法吗?

maven jacoco

17
推荐指数
1
解决办法
2万
查看次数

Android Studio中的Jacoco代码覆盖范围

我一直试图在一段时间内安静地进行Jacoco测试覆盖.我在这些主题中尝试了几种可能的解决方案:

使用JaCoCo Gradle插件的Android测试代码覆盖率

如何使用Android gradle插件0.10.0或更高版本获取jacoco覆盖率报告?

我正在使用genymotion在一个emulatated设备中运行测试.这是我添加到build.gradle的内容:

apply plugin: 'jacoco'

android{       
    jacoco {
        version "0.7.1.201405082137"
    }        
    buildTypes{
        debug{
                    testCoverageEnabled = true
        }
    }
}

jacoco {
    toolVersion "0.7.1.201405082137"
}
Run Code Online (Sandbox Code Playgroud)

要运行它,我会使用类似的东西

./gradlew clean
./gradlew createFLAVOR_NAMEDebugCoverageReport
Run Code Online (Sandbox Code Playgroud)

相关生成的文件/文件夹是:

/build/intermediates/coverage-instrumented-classes
/build/intermediates/jacoco
/build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec
Run Code Online (Sandbox Code Playgroud)

但是,@ build/reports/jacoco/test/html/index.html或任何html页面/代码覆盖率报告@/build/outputs都没有.

我还尝试创建一个专门的任务来构建一个覆盖率报告:

def coverageSourceDirs = [
    'src/main/java',
]

task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }
    classDirectories = fileTree(
        dir: './build/intermediates/classes/debug',
        excludes: ['**/R*.class', …
Run Code Online (Sandbox Code Playgroud)

android code-coverage gradle jacoco test-coverage

17
推荐指数
2
解决办法
8795
查看次数

jacoco代码覆盖率报告生成器显示错误:"包中的类"代码覆盖率报告'与执行数据不匹配"

我正在使用jacoco:report标签生成jacoco报告.我收到的错误如下:

[jacoco:report] Classes in bundle 'Code Coverage Report' do no match with execution data. For report generation the same class files must be used as at runtime.
[jacoco:report] Execution data for class xxxxx does not match.
[jacoco:report] Execution data for class yyyyy does not match.
Run Code Online (Sandbox Code Playgroud)

蚂蚁报告目标如下:

<target name="report">
                <jacoco:report>
                        <executiondata>
                                <file file="${jacocoexec.dir}/${jacocoexec.filename}"/>
                        </executiondata>
                        <!-- the class files and optional source files ... -->
                        <structure name="Code Coverage Report">
                                <classfiles>
                                        <fileset file="./jar/abc.jar"/>
                                </classfiles>
                                <sourcefiles>
                                      <fileset dir="./code/src"/>
                                </sourcefiles>
                        </structure>
                        <!-- to produce reports …
Run Code Online (Sandbox Code Playgroud)

java ant jacoco

17
推荐指数
2
解决办法
2万
查看次数

Sonar Jacoco为Kotlin Setup不生成代码覆盖率

我正在尝试使用Jacoco为Kotlin做声纳设置以生成代码覆盖率报告,但它没有显示任何代码覆盖率.在检查Sonar控制台时,它显示以下错误.任何人之前都遇到过这个问题,任何建议可能会错过.

元信息

插件使用sonarqube版本"2.6.1"

gradleVersion ='3.0.1'

kotlinVersion ='1.2.21'

Sonarqube版本=版本6.7.1(版本35068) - LGPL v3

令人沮丧的是,我的设置项目生成空白代码覆盖率报告:(.PFA.

在此输入图像描述

编辑:请找到项目结构快照.

我正在添加声纳和Jacoco gradle文件设置我正用于生成声纳矩阵报告.

在此输入图像描述

这是sonar.gradle文件:

sonarqube {

    properties {
        property "sonar.projectKey", "jacoco.sonar.test"
        property "sonar.projectName", "Sonar Jacoco Test"
        property "sonar.projectVersion", "1.1"

        property "sonar.java.source", "7"

        property "sonar.android.lint.report", "build/outputs/lint-results.xml"
        property "sonar.java.binaries", "build/tmp/kotlin-classes"
        property "sonar.java.test.binaries", "build/intermediates/classes/test/,build/tmp/kotlin-classes/devDebugUnitTest"
        property "sonar.tests","src/test/java"
        property "sonar.sources","src/main/java"
        property "sonar.java.coveragePlugin", "jacoco"
        property "sonar.jacoco.reportPaths","build/jacoco/testDevDebugUnitTest.exec"
        property "sonar.junit.reportsPath","build/test-results/testDevDebugUnitTest"
    }
}
Run Code Online (Sandbox Code Playgroud)

这里是jacoco.gradle文件

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.9"
    reportsDir = file("${project.projectDir}/app/build/reports")
}

task jacocoTestReport(type: JacocoReport, dependsOn: "app:testDevDebugUnitTest") {
    group = …
Run Code Online (Sandbox Code Playgroud)

android code-coverage jacoco sonarqube sonarqube-ops

17
推荐指数
1
解决办法
1460
查看次数

Sonarqube的整体报道与jacoco报道报道不符

我有一个多模块Android项目,我发现jacoco报告的报道与Sonarqube报告的内容之间存在差异.该项目也是一个多风味的项目,产生了许多不同的变种.我正在使用此插件来帮助我生成所有任务.任务为每个变体生成单独的报告.

当我运行我的jacoco报告时,我看到了这个:

jacoco报道

当我运行声纳扫描仪时,我看到: 声纳覆盖报告

我的项目有一些排除,但即使没有它们,覆盖率%s也不匹配.

我觉得我可能没有提供与此问题中暗示相同的字节码:

以下是我的相关信息:Sonar 5.6版.

Gradle runner

plugins { id "org.sonarqube" version "2.0.1" }
Run Code Online (Sandbox Code Playgroud)

声纳配置:(在root build.gradle上)

sonarqube {
    properties {
        property "sonar.projectKey", "com.xxx.myApp"
        property "sonar.projectName", "Android My App"
        property "sonar.projectVersion", "3.0"
        property "sonar.java.binaries", "build/classes"
        property "sonar.coveragePlugin", "jacoco"
        property "sonar.jacoco.reportMissing.force.zero", "false"
    }
}
Run Code Online (Sandbox Code Playgroud)

声纳配置(在app/build.gradle上)

sonarqube {
    properties {
        property "sonar.sources", "src/main/java"
        property "sonar.tests", "src/test/java"
        property "sonar.java.tests", "src/test/java"
        property "sonar.junit.reportsPath", "build/test-results/myAppGoogleMobileDebug"
        property "sonar.java.binaries", "build/intermediates/classes/myAppGoogleMobile/debug"
        property "sonar.jacoco.reportPath", "build/jacoco/testMyAppGoogleMobileDebugUnitTest.exec"
        property "sonar.coverage.exclusions", coverageExclusions

    }
}
Run Code Online (Sandbox Code Playgroud)

Jacoco config on(app/build.gradle) …

android code-coverage jacoco sonarqube

16
推荐指数
1
解决办法
3211
查看次数

如何从测试覆盖范围中排除Dagger2类

是否有任何选项可以从Android Studio中的测试覆盖率报告中排除Dagger2类

android jacoco android-testing android-studio dagger-2

16
推荐指数
3
解决办法
4495
查看次数

Java8项目的SonarQube提供了jacoco-Exception

我刚刚下载了最新版本的SonarQube 4.3,然后尝试使用以下命令构建一个java-8项目:

  mvn clean install
  mvn sonar:sonar
Run Code Online (Sandbox Code Playgroud)

这给了我下面的例外.

谷歌搜索,我得到的印象这是一个应该修复的早期问题......?

http://sonarqube.15.x6.nabble.com/Sonar-analyze-Java-1-8-project-Failure-td5023663.html

http://jira.codehaus.org/browse/SONARJAVA-482

SonarQube 4.3是否支持java-8?

或者任何线索,有什么问题?

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:99)
        at org.jacoco.agent.rt.internal_6effb9e.PreMain.createRuntime(PreMain.java:55)
        at org.jacoco.agent.rt.internal_6effb9e.PreMain.premain(PreMain.java:47)
        ... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
        at java.lang.Class.getField(Class.java:1690)
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:136)
        ... 9 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)

java java-8 jacoco sonarqube

15
推荐指数
2
解决办法
8551
查看次数