无法获取 Gradle OpenCover 插件来生成覆盖率结果
Can't get Gradle OpenCover plugin to produce coverage results
我没有从 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\buildsebc972[=11=]\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
}
感谢您的帮助,
-药草
在 https://github.com/Ullink/gradle-opencover-plugin/issues/17
的 Francois Valdy 的帮助下回答了这个问题
问题原来是 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:+[*]*'
}
顺便说一句,我确实尝试替换 file() 在 targetAssemblies 中用于 opencover gradle 插件,但这没有效果。根据我的阅读,以下内容应该有效。
opencover {
targetAssemblies = ['output/Scrpt.dll','output/Scrpt.Core.dll','output/Scrpt.SourceCitations.dll','output/ScrptUtilLib.dll']
ignoreFailures = false
}
您需要设置一个 opencover 过滤器。开盖过滤器适用于包容性和排他性过滤器。
第一个过滤器应始终类似于:
+[*]*
意思是包括每个程序集和每个 class。
然后添加您的专属过滤器:
+[*]* -[AssemblyName]* -[*AnotherName]*
很简单。只需先添加通用包容性过滤器,获取结果,然后开始逐步排除过滤器中的内容。
我没有从 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\buildsebc972[=11=]\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
}
感谢您的帮助, -药草
在 https://github.com/Ullink/gradle-opencover-plugin/issues/17
的 Francois Valdy 的帮助下回答了这个问题问题原来是 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:+[*]*'
}
顺便说一句,我确实尝试替换 file() 在 targetAssemblies 中用于 opencover gradle 插件,但这没有效果。根据我的阅读,以下内容应该有效。
opencover {
targetAssemblies = ['output/Scrpt.dll','output/Scrpt.Core.dll','output/Scrpt.SourceCitations.dll','output/ScrptUtilLib.dll']
ignoreFailures = false
}
您需要设置一个 opencover 过滤器。开盖过滤器适用于包容性和排他性过滤器。
第一个过滤器应始终类似于:
+[*]*
意思是包括每个程序集和每个 class。
然后添加您的专属过滤器:
+[*]* -[AssemblyName]* -[*AnotherName]*
很简单。只需先添加通用包容性过滤器,获取结果,然后开始逐步排除过滤器中的内容。