Search code examples
azure.net-coresonarqubecode-coverageazure-pipelines

Publish test coverage of multiple .NET Core Projects from Azure DevOps to SonarQube server


I have a .net core solution with two xunit test projects. The build runs on Azure DevOps pipeline and I want to publish the test coverage to a SonarQube (Community) server.

I have basically followed this blog post and it is almost working, the issue is that I only see the coverage of the last test project, not both of them.

I may be wrong but from this issue I guessed that I need to merge my *.coveragexml files before sending to SonarQube.

I have seen that you can merge coverage files with tools like Coverlet but when I tried (from this help page) I got some errors (like Could not find file xunit.runner.reporters.netcoreapp10_101ce3bf-0896-4b2a-9f9e-67d8c0b742e6.pdb)

Before running into this rabbit hole I would prefer to know if I really need to merge my .coveragexml files... and if so can I do it with the regular tools or do I need others like Coverlet...

Cheers


Solution

  • I finally found the issue. You don't need to merge the .coveragexml files, the last version of the SonarScanner.MSBuild.exe actually finds all the .coveragexml files. I looked more closely in the logs and found multiple lines like these:

    INFO: Sensor C# Tests Coverage Report Import [csharp]
    INFO: Parsing the Visual Studio coverage XML report [...]
    INFO: Adding this code coverage report to the cache [...]
    INFO: Parsing the Visual Studio coverage XML report [...]
    INFO: Adding this code coverage report to the cache [...]
    

    So the .coveragexml files were found and published to sonar.

    The reported coverage was false because I needed to add a

    <DebugType>Full</DebugType>
    

    In a project. The odd thing is that the other projects reported some code coverage without this property set in the .csproj so I thought I didn't need it.

    So if the reported coverage seems false, try adding this property in the csproj.