我有一个项目,使用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' }
Godin.. 5
如果我src/test/java
从您的项目中删除并使用生成JaCoCo报告./gradlew clean build jacocoTestReport
,则报告build/reports/jacoco/test/html/index.html
显示一些覆盖范围.由于只剩src/test/groovy
下 - 我得出结论,实际上考虑了Spock测试.唯一没有涵盖的包 - 是com.rox.emu.P6502.dbg.ui
,但似乎你没有任何测试.
由于生成的报告包含覆盖率,我猜测你有一些其他应该导入覆盖率数据的工具存在问题.既然你提到了"GitHub shield",我猜这个问题可能与https://codecov.io有关 - 你在Travis的构建中说:
未找到覆盖率报告.
请访问http://docs.codecov.io/docs/supported-languages
根据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代理实现的目标:
此机制允许在类加载期间内存预处理所有类文件,而与应用程序框架无关.
而JaCoCo Gradle插件只是增强了Gradle任务,因此他们将使用这个代理.
如果我src/test/java
从您的项目中删除并使用生成JaCoCo报告./gradlew clean build jacocoTestReport
,则报告build/reports/jacoco/test/html/index.html
显示一些覆盖范围.由于只剩src/test/groovy
下 - 我得出结论,实际上考虑了Spock测试.唯一没有涵盖的包 - 是com.rox.emu.P6502.dbg.ui
,但似乎你没有任何测试.
由于生成的报告包含覆盖率,我猜测你有一些其他应该导入覆盖率数据的工具存在问题.既然你提到了"GitHub shield",我猜这个问题可能与https://codecov.io有关 - 你在Travis的构建中说:
未找到覆盖率报告.
请访问http://docs.codecov.io/docs/supported-languages
根据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代理实现的目标:
此机制允许在类加载期间内存预处理所有类文件,而与应用程序框架无关.
而JaCoCo Gradle插件只是增强了Gradle任务,因此他们将使用这个代理.