Cobertura覆盖Grails插件和依赖项

时间:2015-02-06 01:41:49

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

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

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

该报告仅包含我的Grails应用程序代码(域类,服务等),而不包含任何其他内容。我希望覆盖我的应用正在使用的大多数插件。

我尝试通过inplace notation(grails.plugin.location.fooplugin =&#39;路径&#39;)尝试包含插件,但覆盖率报告仍然不包含我的fooplugin代码。< / p>

帮助?

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

1 个答案:

答案 0 :(得分:4)

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

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

您需要在几个地方修改代码覆盖率_Events.groovy才能让事情发挥作用。

<强>仪表

修改AntInstrumentationBuildfileBuilder.build()。它使用MarkupBuilder构建运行Cobertura的Ant XML。我添加了以下&#39; extraClassesDir&#39;:

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

在代码覆盖率_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>