Search code examples
sonarqubenunitgradle-pluginsonarqube-scanopencover

Can't get Gradle OpenCover plugin to produce coverage results


I'm not getting any results from opencover. My nunit tests all run and pass, just no coverage results. the problem seems to be opencover filters, but we aren't setting any. Any suggestions?

The CodeCoverage.xml file contains a group of lines like the following which indicate that the plugin is telling opencover to filter out the DLLs we are trying to measure.

<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>

which has the correct path for the dll file, but I don't see why it is skipped due to filtering. The unit tests are contained in a dll called Scrpt.Test.dll and the rest of the code is in other DLLs all of which are being filtered out.

I'm using the following plugins

plugins {
  id 'com.ullink.msbuild' version '2.15'
  id 'com.ullink.nunit' version '1.8'
  id 'com.ullink.opencover-nunit' version '1.6'
}

and the plugin definitions for nunit and opencover are:

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
}

Thank you for your help, -herb


Solution

  • You need to set an opencover filter. Open cover filter works off of inclusive and exclusive filters.

    The first filter should always be something like :

    +[*]*
    

    meaning include every assembly and every class. then add in your exclusive filters: +[*]* -[AssemblyName]* -[*AnotherName]*

    It's very simple. just add in the universal inclusive filter first, get your results, then start to incrementally exclude stuff in your filter one by one.