【问题标题】:Jacoco not showing Spock code coverage in my Gradle projectJacoco 在我的 Gradle 项目中没有显示 Spock 代码覆盖率
【发布时间】:2014-07-21 21:53:10
【问题描述】:

我有一个配置了 jacoco 插件的 Gradle 项目来报告测试代码覆盖率。我的单元测试是用 Spock 框架编写的。

虽然 Jacoco 插件会生成 HTML 报告,但它会将所有类的代码覆盖率报告为 0%。

我用谷歌搜索了很多,但找不到我缺少的东西。有没有人使用 Gradle + Jacoco 获得 Spock 代码覆盖率?

apply plugin: "jacoco"
apply plugin: "groovy"

sourceSets {
    main {
        java { srcDirs = ['src/main/java'] }
        groovy {srcDirs = ['src/main/groovy'] }
        resources { srcDir 'src/main/resources' }
    }

    test {
        java { srcDirs = ['src/test/java'] }
        groovy { srcDirs = ['src/test/groovy'] }
        resources { srcDir 'src/test/resources' }
    }
}

test {
    jvmArgs '-Xms64m', '-Xmx2G', '-XX:MaxPermSize=128m'
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
        html.destination "${buildDir}/jacocoHtml"
    }
}

dependencies {
    testCompile "org.spockframework:spock-core:0.7-groovy-2.0"
    testCompile "org.spockframework:spock-spring:0.7-groovy-2.0"
}

【问题讨论】:

  • 让代码覆盖率与 Spock 一起工作与让它与 JUnit 一起工作没有什么不同。将 Groovy 源目录添加到 sourceSets.main.java 和 sourceSets.test.java 似乎不正确。 doFirst 似乎也不对。 classDumpFile 之类的东西不必手动配置(除非您对默认设置不满意)。也许从完整 Gradle 发行版中的 JaCoCo 示例构建之一开始。
  • 谢谢@PeterNiederwieser。我修复了sourceSets.main.java 和sourceSets.test.java,并删除了classDumpFile。但是我不清楚doFirst{} 有什么问题。有什么线索吗?
  • 没有理由用doFirst 包装classDirectories 的配置。我不是特别在谈论classDumpFile。只是说更改的默认值越多,某处出错的可能性就越大。再次检查完整 Gradle 分布中的样本。
  • 我已经删除了覆盖默认值的配置。我现在有一个普通的配置。覆盖率仍报告为 0%。我下载了最新的完整 Gradle 发行版以寻找示例,但没有一个示例在其中配置了 Jacoco。
  • 我对 Gradle 示例采取上述评论。实际上在 /samples/testing/jacoco 下有一个例子。我的项目中有完全相同的配置。唯一的区别是,我的源代码是 Java,测试是 Spock。我这里完全没有线索。

标签: unit-testing gradle code-coverage spock jacoco


【解决方案1】:

@PeterNiederwieser 的建议非常有效。这是最终结果:

apply plugin: "groovy"
apply plugin: "jacoco"

repositories { mavenCentral() }

dependencies {
  compile "org.codehaus.groovy:groovy-all:2.2.2"
  testCompile "org.spockframework:spock-core:0.7-groovy-2.0"
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
        html.destination "${buildDir}/jacocoHtml"
    }
}

【讨论】:

  • 您能否深入了解源代码中的行覆盖率?在我的报告中,方法名称不可点击,因此我无法深入了解源代码中的行。我使用 Spock 1.0、Gradle 2.8 和 Groovy 2.4。
猜你喜欢
  • 2013-08-09
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多