我有一个project使用JUnit构成简单的单元测试(test/java
)和Spock来执行更复杂的数据驱动单元测试(test/groovy
)。我用Gradle构建了这一切。
我的问题是生成JaCoCo报告导致代码覆盖率非常低,因为它似乎只考虑了JUnit测试。我可以在IntelliJ,Pitest中完成这些测试,并且通过Gradle也可以找到所有测试并报告正确的线路覆盖范围。
(我需要JaCoCo设置我的GitHub盾牌)
如何让JaCoCo使用两种测试框架报告线路覆盖?
的build.gradle
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'
}
答案 0 :(得分:5)
如果我从您的项目中删除src/test/java
并使用./gradlew clean build jacocoTestReport
生成JaCoCo报告,则build/reports/jacoco/test/html/index.html
中的报告会显示一些报道。由于只留下src/test/groovy
- 我得出结论,Spock测试实际上已被考虑在内。唯一没有涵盖的包是com.rox.emu.P6502.dbg.ui
,但似乎您没有对其进行任何测试。
由于生成的报告包含覆盖范围,我猜测您对其他一些应该导入覆盖率数据的工具有问题。既然你提到过" GitHub shield",我猜测问题可能出在https://codecov.io - 你的build in Travis states:
未找到覆盖率报告。
根据https://github.com/codecov/example-gradle/blob/master/README.md#add-jacoco-plugin:将JaCoCo集成到Codecov中需要生成JaCoCo XML报告。所以添加
jacocoTestReport {
reports {
xml.enabled true
}
}
进入build.gradle
并且不要忘记执行gradlew jacocoTestReport
。
作为注释:JaCoCo本身独立于测试框架。要获得覆盖,您的测试应该只执行由JaCoCo检测的类,使用JaCoCo Java agent实现的目标:
此机制允许在类加载期间对所有类文件进行内存预处理,独立于应用程序框架。
JaCoCo Gradle插件只是增强了Gradle任务,因此他们将使用此代理。