Generate Code Coverage Report For .NET Core & .NET Framework projects
In the previous post, I talked about how to set up a SonarQube server local to analyze the code quality. In this post, I’m going to talk about how to generate the code coverage report and push the report to the sonar server. So that, we can have an overview of the quality of the codebase.
Generate console code coverage report with coverlet console
There are multiple ways to working with the coverlet package. But personally, I’m more prefer the coverlet console due to these benefits:
- No need to add an extra dependency package such as coverlet.collector or coverlet.msbuild to the codebase (test projects) => No source code modification is needed.
- Can support both .NET Framework and .NET Core project.
- Simple to set up and run.
Prerequisites
- .NET Core runtime 2.2 and above
- dotnet global tool
Installation
dotnet tool install --global coverlet.console
Usage
The coverlet
tool is invoked by specifying the path to the assembly that contains the unit tests. You also need to specify the test runner and the arguments to pass to the test runner using the --target
and --targetargs
options respectively. The invocation of the test runner with the supplied arguments must not involve a recompilation of the unit test assembly or no coverage result will be generated.
The following example shows how to use the familiar dotnet test
toolchain:
coverlet /path/to/test-assembly.dll --target "dotnet" --targetargs "test /path/to/test-project --no-build"
Note: The --no-build
flag is specified so that the /path/to/test-assembly.dll
assembly isn't rebuilt
See documentation for advanced usage.
Back to the age calculator project. Let’s generate a console code coverage report as an example:
coverlet .\AgeCalculatorTests.dll --target "vstest.console.exe" --targetargs ".\AgeCalculatorTests.dll" --format "opencover" --output .\coverage-reports\
Generate HTML test report with Report Generator
ReportGenerator converts coverage reports generated by coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov or lcov into human-readable reports in various formats.
The reports do not only show the coverage quota but also include the source code and visualize which lines have been covered.
Installation
There are multiple ways to getting started with the report generator in your local machine. But, IMHO, the simplest way is:
- Download the release as a zip package and then
- Copy all contents in the appropriate .NET runtime version folder - which is installed on your local machine to a new folder
- Modify the PATH variable to enable global access to the ReportGenerator.exe file
Usage
ReportGenerator "-reports:.\coverage-reports\coverage.opencover.xml" "-targetdir:.\report"
Example output
Push the code coverage report to the SonarQube server
SonarScanner.MSBuild.exe begin /k:"age_calculator" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<your_sonar_project_key_here>" /d:sonar.cs.opencover.reportsPaths=".\AgeCalculatorTests\bin\Debug\net48\coverage-reports\coverage.opencover.xml" /d:sonar.coverage.exclusions="**Program.cs"
MsBuild.exe /t:Rebuild
SonarScanner.MSBuild.exe end /d:sonar.login="<your_sonar_project_key_here>"