有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么JaCoCo看到我的JUnit而忽略我的Spock测试?

我有一个project,它使用JUnit来形成简单的单元测试(test/java),使用Spock来执行更复杂的、数据驱动的单元测试(test/groovy)。这一切都是我和Gradle一起做的

我的问题是,生成JaCoCo报告会导致代码覆盖率非常低,因为它似乎只考虑了JUnit测试。我可以在IntelliJ、Pitest和via Gradle中一起运行这些测试,还可以找到所有测试并报告正确的行覆盖率

(我需要JaCoCo设置我的GitHub屏蔽)

如何让JaCoCo使用这两个测试框架报告行覆盖率

构建。格拉德尔

group 'com.rox'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'jacoco'
apply plugin: 'info.solidsoft.pitest'
apply plugin: 'application'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.11'
    compile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
    compile group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4-rc-1'
}

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.1.4"
    }
}

task runDebugUI(type: JavaExec, group: 'run') {
    classpath sourceSets.main.runtimeClasspath
    main = mainClassName = 'com.rox.emu.P6502.dbg.UI'
}

共 (1) 个答案

  1. # 1 楼答案

    如果我从您的项目中删除src/test/java,并使用./gradlew clean build jacocoTestReport生成JaCoCo报告,那么build/reports/jacoco/test/html/index.html中的报告将显示一些覆盖范围。由于只剩下src/test/groovy,我得出结论,斯波克试验实际上被考虑在内。唯一没有涵盖的包是com.rox.emu.P6502.dbg.ui,但似乎您没有对它进行任何测试

    由于生成的报告包含覆盖率,我猜您对其他一些应该导入覆盖率数据的工具有问题。既然您提到了“GitHub shield”,我猜问题可能出在https://codecov.io-您的build in Travis states

    No coverage report found.

    Please visit http://docs.codecov.io/docs/supported-languages

    根据https://github.com/codecov/example-gradle/blob/master/README.md#add-jacoco-plugin:将JaCoCo集成到Codecov需要生成jacocoxml报告。所以加上

    jacocoTestReport {
        reports {
            xml.enabled true
        }
    }
    

    进入build.gradle,不要忘记执行gradlew jacocoTestReport

    注意:JaCoCo本身独立于测试框架。为了获得覆盖率,您的测试应该只执行由JaCoCo插装的类,通过使用JaCoCo Java agent可以实现:

    This mechanism allows in-memory pre-processing of all class files during class loading independent of the application framework.

    JaCoCo Gradle插件只是简单地增强了Gradle任务,所以他们将使用这个代理