我没有从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
答案 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]*
这很简单。只需首先添加通用包含过滤器,获取结果,然后开始逐步逐步排除过滤器中的内容。