【问题标题】:Cobertura coverage for Grails plugins and dependenciesCobertura 覆盖 Grails 插件和依赖项
【发布时间】:2015-04-06 02:12:32
【问题描述】:

是否可以为我的 Grails 应用程序生成一个 Cobertura 报告,其中不仅包括应用程序代码,还包括我自己编写的几个插件?

目前我已经(不正确地)在我的 Grails 应用程序中为我的插件编写了测试,而不是把这些测试放在相应的插件中。

该报告仅包括我的 Grails 应用程序的代码(域类、服务等),没有其他内容。我想要覆盖我的应用正在使用的大多数插件。

我已尝试通过就地表示法 (grails.plugin.location.fooplugin = 'path') 包含插件,但覆盖率报告仍然不包含我的 fooplugin 代码。

帮助?

http://grails.org/plugin/code-coverage

【问题讨论】:

    标签: grails dependencies code-coverage grails-plugin cobertura


    【解决方案1】:

    插件似乎不支持这种行为。我必须下载源代码并为自己创建一个自定义版本。

    我已成功检测并报告了我所有 Grails 应用程序的直接插件及其传递插件。

    您需要在几个地方修改代码覆盖的 _Events.groovy 才能让事情正常工作。

    仪器

    修改 AntInstrumentationBuildfileBuilder.build()。它使用 MarkupBuilder 构建运行 Cobertura 的 Ant XML。我添加了下面的“extraClassesDir”:

    File extraClassesDir = new File('/path/to/grails/project/target/work/plugin-classes')
    
    ...
    
    'target'(name: 'instrument') {
        'cobertura-instrument'(instrumentArguments) {
            'fileset'(dir: "${classesDir.absolutePath}") {
                'include'(name: "**/*.class")
                codeCoverageExclusionList.each { pattern ->
                    'exclude'(name: "${pattern}")
                }
            }
    
            // My additions:
            'fileset'(dir: extraClassesDir.absolutePath) {
                'include'(name: "**/*.class")
                codeCoverageExclusionList.each { pattern ->
                    'exclude'(name: "${pattern}")
                }
            }
        }
    }
    

    报告

    以上将检测您的类,但在报告中您将无法跳转到源代码。我通过添加以下内容修改了 createCoverageReports():

    if (buildConfig.coverage?.grailsSourceInclusions) {
        buildConfig.coverage.grailsSourceInclusions.each {
            fileset(dir: "${it}/grails-app/controllers", erroronmissingdir: false)
            fileset(dir: "${it}/grails-app/domain", erroronmissingdir: false)
            fileset(dir: "${it}/grails-app/services", erroronmissingdir: false)
            fileset(dir: "${it}/grails-app/taglib", erroronmissingdir: false)
            fileset(dir: "${it}/grails-app/utils", erroronmissingdir: false)
            fileset(dir: "${it}/src/groovy", erroronmissingdir: false)
            fileset(dir: "${it}/src/java", erroronmissingdir: false)
        }
    }
    

    基本上为了报告我创建了一个新的配置设置,所以我的 Grails 项目的 BuildConfig.groovy 看起来像:

    coverage {
        enabledByDefault = false
        xml = true
    
        grailsSourceInclusions = [
            '/path/to/source/of/plugin1',
            '/path/to/source/of/plugin2'
        ]
    }
    

    ANT XML

    在 code-coverage 的 _Events.groovy 中,如果您注释掉以下行,您至少可以查看生成的 Ant XML:

    println "instrumentBuildFile=$instrumentBuildFile
    //instrumentBuildFile.delete()
    

    如果你做对了,你的 XML 应该在底部附近包含如下内容,以使检测工作正常:

    <target name="instrument">
    <cobertura-instrument datafile="/path/to/grails/project/cobertura.ser">
      <fileset dir="/path/to/grails/project/target/classes">
        <include name="**/*.class" />
        <exclude name="**/*BootStrap*" />
        <exclude name="Config*" />
        <exclude name="BuildConfig*" />
        ...
      </fileset>
    
      <!-- Here's our addition -->
      <fileset dir="/path/to/grails/project/target/work/plugin-classes">
        <include name="**/*.class" />
        <exclude name="**/*BootStrap*" />
        <exclude name="Config*" />
        <exclude name="BuildConfig*" />
        ...
      </fileset>
    </cobertura-instrument>
    </target>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2014-03-18
      • 2012-03-06
      • 2011-04-28
      • 2020-04-12
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多