gpt4 book ai didi

java - 为什么 JaCoCo 看到了我的 JUnit 但忽略了我的 Spock 测试?

转载 作者:行者123 更新时间:2023-11-30 06:07:22 24 4
gpt4 key购买 nike

我有一个 project它使用 JUnit 形成简单的单元测试 (test/java),使用 Spock 执行更复杂的数据驱动单元测试 (test/groovy)。我用 Gradle 构建所有这些。

我的问题是生成 JaCoCo 报告导致代码覆盖率非常低,因为它似乎只考虑了 JUnit 测试。我可以在 IntelliJ、Pitest 中一起运行这些测试,并且通过 Gradle 也可以找到所有测试并报告正确的线路覆盖率。

(我需要 JaCoCo 来设置我的 GitHub shield)

如何让 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'
}

最佳答案

如果我从您的项目中删除 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 盾牌”,我猜这个问题可能出在 https://codecov.io 上。 - 你的build in Travis states :

No coverage report found.

Please visit 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 agent 实现的。 :

This mechanism allows in-memory pre-processing of all class files during class loading independent of the application framework.

而 JaCoCo Gradle 插件只是增强了 Gradle 任务,因此他们将使用此代理。

关于java - 为什么 JaCoCo 看到了我的 JUnit 但忽略了我的 Spock 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com