无法获得Gradle OpenCover插件以生成覆盖率结果

时间:2016-10-12 18:51:33

标签: sonarqube nunit gradle-plugin sonarqube-scan opencover

我没有从opencover获得任何结果。我的nunit测试所有运行和通过,只是没有覆盖结果。问题似乎是opencover过滤器,但我们没有设置任何。有什么建议吗?

CodeCoverage.xml文件包含一组如下所示的行,表明该插件告诉opencover过滤掉我们试图测量的DLL。

<Module hash="A3-F0-3A-1A-FF-38-D7-EF-A2-55-C9-8B-84-37-CF-CF-00-80-70-23" skippedDueTo="Filter">
<FullName>C:\gitlab-runner\builds\83ebc972\0\active\scrpt\output\Scrpt.Core.dll</FullName>
<ModuleName>Scrpt.Core</ModuleName>
<Classes/></Module>

具有dll文件的正确路径,但我不知道为什么会因为过滤而跳过它。单元测试包含在一个名为Scrpt.Test.dll的DLL中,其余的代码都在其他DLL中,所有这些都被过滤掉了。

我使用以下插件

plugins {
  id 'com.ullink.msbuild' version '2.15'
  id 'com.ullink.nunit' version '1.8'
  id 'com.ullink.opencover-nunit' version '1.6'
}

和nunit和opencover的插件定义是:

nunit {
  testAssemblies = [file('output/Scrpt.Tests.dll')]
  shadowCopy = false
  useX86 = true
  ignoreFailures = false
}

opencover {
  targetAssemblies = [file('output/Scrpt.dll'),file('output/Scrpt.Core.dll'),file('output/Scrpt.SourceCitations.dll'),file('output/ScrptUtilLib.dll')]
  ignoreFailures = false
}

感谢您的帮助, -herb

2 个答案:

答案 0 :(得分:0)

通过https://github.com/Ullink/gradle-opencover-plugin/issues/17

在弗朗索瓦·瓦尔迪的帮助下回答了这个问题

问题原来是opencover插件没有生成coverage.xml结果。 xml中有一条错误消息说由于过滤器而跳过了我感兴趣的文件,但我找不到导致过滤器的过滤器。

我最终用一个执行相同操作的任务替换了opencover插件。不确定为什么插件不起作用,但替换基本上是相同的,因为它调用nunit,创建输出覆盖xml,然后sonarqube上传。另外,通过这种方式,您可以更好地控制文件的最终位置。

有点尴尬,但它有效。以下内容在我原来的问题中替换了opencover块。

task opencover(type:Exec) {
 executable 'C:\\Program Files (x86)\\OpenCover\\OpenCover.Console.exe'
 workingDir file('output')
 args "-target:c:\\Program Files (x86)\\NUnit 2.6.4\\bin\\nunit-console-x86.exe", "-targetargs:c:\\gitlab-runner\\builds\\83ebc972\\0\\active\\scrpt\\output\\scrpt.tests.dll /noshadow", '-output:coverage.xml', '-filter:+[*]*'
}
顺便说一下,我确实尝试替换opencover gradle插件的targetAssemblies文件()使用,但这没有任何效果。根据我的阅读,以下内容应该有效。

opencover {
  targetAssemblies = ['output/Scrpt.dll','output/Scrpt.Core.dll','output/Scrpt.SourceCitations.dll','output/ScrptUtilLib.dll']
  ignoreFailures = false
}

答案 1 :(得分:0)

需要设置一个opencover过滤器。打开盖子过滤器使用包容性和专用过滤器。

第一个过滤器应始终如下:

+[*]*

含义包括每个集会和每个班级。 然后添加您的独家过滤器: +[*]* -[AssemblyName]* -[*AnotherName]*

这很简单。只需首先添加通用包含过滤器,获取结果,然后开始逐步逐步排除过滤器中的内容。