2016-10-12 47 views
0

我没有从opencover得到任何结果。我的nunit测试全部运行并通过,只是没有覆盖结果。问题似乎是opencover过滤器,但我们没有设置任何。有什么建议么?无法获得Gradle 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都被过滤掉的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

这是通过Francois Valdy的帮助回答了https://github.com/Ullink/gradle-opencover-plugin/issues/17

问题原来是opencover插件没有生成coverage.xml结果。在xml中有一个错误消息,说我感兴趣的文件因为过滤器而被忽略,但是我找不到过滤器造成的结果。

我最终用完成相同任务的任务替换了opencover插件。不知道为什么插件没有工作,但替换本质上是相同的,它调用nunit,创建sonarqube然后上传的输出coverage xml。此外,这样做可以让您更好地控制文件的最终位置。

有点尴尬,但它的工作。以下取代了原来问题中的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:+[*]*' 
} 

顺便说一句,我也尝试替换文件()使用的targetAssemblies为opencover gradle这个插件,但没有任何效果。从我读过的内容来看,下面的内容应该是有效的。

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

需要设置一个过滤器opencover。打开封面过滤器工作的包容性和独家过滤器。

第一个过滤器应该永远是这样的:

+[*]* 

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

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

相关问题