当前位置: 首页 > 知识库问答 >
问题:

当使用带有Gradle和Groovy代码的Cobertura时,报告了异常低的测试覆盖率

章松
2023-03-14

我正在开发一个Gradle插件,我正在尝试配置我的项目,让我得到它的代码覆盖率度量。我有基于Spock框架的单元和集成测试。

我尝试使用Jacoco和Cobertura来分析我的项目。下面是我正在使用的配置:

Gradle:       2.2.1
Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_25 (Oracle Corporation 25.25-b02)
OS:           Mac OS X 10.10.1 x86_64

我使用的是gradle-cobertura-pluginV2.2.5。

科贝图拉

在Cobertura的情况下,我的项目报告的线路覆盖率只有35%。我为其编写测试的代码中有很大一部分被报告为未被Cobertura测试:

特别是,Cobertura报告没有覆盖嵌套的静态类version.parser,尽管有一个完整的Spock规范专门用于此:

package com.github.tagc.semver

import spock.lang.Specification
import spock.lang.Unroll

import com.github.tagc.semver.Version.Parser

@Unroll
class VersionParserSpec extends Specification {

    private static final Parser PARSER = Version.Parser.getInstance()

    def "Version information should be extracted from files if parsing is not strict"() {
        given:
        def versionFileText = "version='$versionString'"

        expect:
        PARSER.parse(versionFileText, false) == version

        where:
        versionString      | version
        '0.1.2-SNAPSHOT'   | new Version(0,1,2,false)
        '1.2.4'            | new Version(1,2,4,true)
        '1.3-SNAPSHOT'     | new Version(1,3,0,false)
        '0.4'              | new Version(0,4,0,true)
    }

    def "Valid version representation should be parsed successfully"() {
        expect:
        PARSER.parse(input, true) == version

        where:
        input               | version
        '0.1'               | new Version(0,1,0,true)
        '1.3-SNAPSHOT'      | new Version(1,3,0,false)
        '1.1.1'             | new Version(1,1,1,true)
        '0.2.7'             | new Version(0,2,7,true)
        '0.4.9-SNAPSHOT'    | new Version(0,4,9,false)
        '6.3.16-SNAPSHOT'   | new Version(6,3,16,false)
        '  1.2.3-SNAPSHOT'  | new Version(1,2,3,false)
        ' 1.3.5-SNAPSHOT '  | new Version(1,3,5,false)
    }

    def "Invalid version representation (#input) should cause an exception to be thrown"() {
        when:
        PARSER.parse(input, true)

        then:
        thrown(IllegalArgumentException)

        where:
        input << [
            '1.2.a',
            '1,2,3',
            '2.4.-1',
            '3-4-9',
            '1.4.5-SNPSHOT',
            '1.4.5-SNAPSHOTasd'
        ]
    }
}
buildscript {
    repositories { jcenter() }
    dependencies {
        // Cobertura plugin
        classpath "net.saliman:gradle-cobertura-plugin:2.2.5"
    }
}

configurations.all {
    resolutionStrategy {
        force 'org.ow2.asm:asm:5.0.3'
        forcedModules = [ 'org.ow2.asm:asm:5.0.3' ]
    }
}

apply plugin: 'net.saliman.cobertura'

check.dependsOn 'cobertura'

cobertura {
    coverageFormats = [ 'html', 'xml' ]
}

apply plugin: "jacoco"

task integrationTest(type: Test) {
    description = 'Runs the integration tests.'
    group = 'verification'
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath

    jacoco {
        destinationFile = file("$buildDir/jacoco/integrationTest.exec")
        classDumpFile = file("$buildDir/classes/integrationTest")
    }
}

jacocoTestReport {
    executionData test, integrationTest

    reports {
        xml.enabled true
        html.enabled true
    }
}

既然Jacoco看起来工作得很好,我最好还是坚持下去。但是,在Groovy中编写代码时,Sonar似乎无法与Jacoco一起正常工作,因此我似乎被Cobertura卡住了。为什么Cobertura会给我这些覆盖结果?

编辑

我在Gradle Cobertura插件Github存储库中提出了这个问题。

共有1个答案

翟誉
2023-03-14

我自己还没有测试过它,但显然这个问题在Gradle插件的V2.2.7版本中得到了解决,它使用了Cobertura的V2.1.1版本(源代码)。

 类似资料:
  • 我的sonarqube服务器版本8.3.1启用了cobertura插件来显示cobertura覆盖报告。现在我想报告Jacoco XML覆盖数据(使用gradle Jacoco插件生成),但它不起作用。cobertura和Jacoco之间是否存在任何已知问题?或者两种机制都应该在一个sonarqube上工作?

  • 我正在使用Cobertura maven插件[2.7版]来了解测试的代码覆盖率。我正在使用PowerMock[1.6.6]模拟依赖对象。但是当我运行mvn cobertura:cobertura并检查报告时,覆盖率保持不变。当我不使用嘲弄的时候,它很好用。这是兼容性问题吗?我多次尝试mvn clean,只是为了确保报告是新生成的。 这是我的pom.xml 对此我们非常感谢您的帮助。

  • 我使用jenkins的代码为每个插件生成覆盖率,并显示我喜欢的管道。是否有一个插件我可以使用它(例如Cobertura,但它似乎不受管道支持)?

  • 问题内容: 我正在使用声纳来衡量代码质量。我不知道的一件事是使用Cobertura测量代码覆盖率的步骤。 我按照http://cobertura.sourceforge.net/anttaskreference.html中的步骤进行操作,并且能够生成xml文件。如何将这些xml文件放入SONAR? 有没有在SONAR中使用Cobertura的简便方法? 我在与SONAR服务器不同的服务器上运行代码

  • 我有一个反应应用,使用 npx 创建-反应-应用命令创建,并为 CI/CD 配置了一个基于 yaml 的 Azure DevOps 管道。然后我添加了一些简单的单元测试。 我在yaml管道中添加了一个脚本任务,以生成如下覆盖率结果。 但是这个任务显示以下输出,然后任务继续运行,永远不会结束。我必须取消管道运行才能最终停止它。不知道发生了什么。有什么想法吗? 但是,当我以CI =true作为前缀以按

  • 我有一个使用Gradle的多模块Groovy项目。我应用了jacoco、sonarqube插件。 我能够 找到build/Jacoco/test.exec.Jenkins能够正确渲染它。 使用所有代码覆盖详细信息浏览JacocoHtml 在SonarQube上查找单元测试结果和源代码 但是没有向SonarQube报告代码覆盖率。 这是我的身材。格拉德尔 在构建期间,我观察到以下日志语句。 然后我尝