Example of how to do code coverage on a .NET 5 project.
The resulting OpenCover code coverage calculation can be used in SonarQube.
ReportGenerator can optionally be used to create an Html report of code coverage (Cobertura output format).
This example is based on https://github.com/wulfland/code-coverage-sample and this article.
There is just one problem with the solution presented in the article - if you have more than one test project, test results are not merged.
Only the last project for which the test is executed is taken into consideration when calculating code coverage.
The example in this repository fixes that problem.
To build the solution run:
dotnet build -c Release
To calculate code coverage run:
dotnet test -c Release --logger trx --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=opencover%2cjson /p:CoverletOutput=PATH_TO_CURRENT_DIRECTORY\coverage\ /p:MergeWith=PATH_TO_CURRENT_DIRECTORY\coverage\coverage.json /m:1
Or simply execute RunBuildAndCodeCoverage.ps1 to do both.
Compared with the original example/article, the following changes have been made:
- CoverletOutputFormat was changed from
opencover
toopencover%2cjson
- merging is supported for json format, but not for opencover format
- this is why we create both, do merging using json, and in the end produce both json and opencover
- usage of
%2c
separator is explained here
/p:MergeWith
argument was added to merge code coverage results/m:1
argument was added to force sequential execution of tests- this might not be needed, but is listed as needed here
Get ReportGenerator and in the folder where coverage.opencover.xml
is located run:
.\reportgenerator "-reports:coverage.opencover.xml" "-targetdir:." "-reporttypes:Cobertura;HTMLInline;HTMLChart"
In the generated Html we can see that code coverage is 100% 😃