是否可以为我的Grails应用生成单个Cobertura报告,其中不仅包括应用代码的报道,还包括我自己撰写的几个插件?
目前我在Grails应用程序中为我的插件编写了不正确的(不正确的)测试,而不是将这些测试放在相应的插件中。
该报告仅包含我的Grails应用程序代码(域类,服务等),而不包含任何其他内容。我希望覆盖我的应用正在使用的大多数插件。
我尝试通过inplace notation(grails.plugin.location.fooplugin =&#39;路径&#39;)尝试包含插件,但覆盖率报告仍然不包含我的fooplugin代码。< / p>
帮助?
答案 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>