我没有得到任何结果从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-runnerbuilds83ebc972 activescrptoutputScrpt.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
}