无法让 Gradle OpenCover 插件生成覆盖结果



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

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-runnerbuilds83ebc972activescrptoutputScrpt.Core.dll</FullName>
<ModuleName>Scrpt.Core</ModuleName>
<Classes/></Module>

具有dll文件的正确路径,但我不明白为什么由于过滤而跳过它。单元测试包含在名为script . test .dll的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
}

谢谢你的帮助,草

需要设置一个开盖过滤器。开盖过滤器工作于包含过滤器和排他过滤器。

第一个过滤器应该总是像这样:

+[*]*

意味着包含每个程序集和每个类。然后添加专属过滤器:+[*]* -[AssemblyName]* -[*AnotherName]*

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

这个问题得到了Francois Valdy在https://github.com/Ullink/gradle-opencover-plugin/issues/17的帮助

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

我最终用一个做同样事情的任务替换了opencover插件。不知道为什么插件不起作用,但替换本质上是一样的,因为它调用nunit,创建输出覆盖xml,然后sonarqube上传。此外,这样做可以让您更好地控制文件的最终位置。

有点尴尬,但它工作。下面替换了我原来问题中的opencover block

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:+[*]*'
}

顺便说一句,我确实尝试在targetAssemblies中替换opencover gradle插件中的file()用法,但这没有效果。从我所读到的内容来看,以下内容应该是有效的。

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

相关内容

  • 没有找到相关文章

最新更新