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 楼答案
如果我从您的项目中删除
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:
根据https://github.com/codecov/example-gradle/blob/master/README.md#add-jacoco-plugin:将JaCoCo集成到Codecov需要生成jacocoxml报告。所以加上
进入
build.gradle
,不要忘记执行gradlew jacocoTestReport
注意:JaCoCo本身独立于测试框架。为了获得覆盖率,您的测试应该只执行由JaCoCo插装的类,通过使用JaCoCo Java agent可以实现:
JaCoCo Gradle插件只是简单地增强了Gradle任务,所以他们将使用这个代理