【发布时间】: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