which versions are you using (SonarQube, Scanner, Plugin, and any relevant extension)
-Community Edition Version 8.5 (build 37579)
-sonar-scanner-msbuild-5.5.3.43281-net5.0
what are you trying to achieve
-trying to import test execution report into sonarqube server
SonarQube doesn’t run your tests or generate reports. To include coverage results in your analysis, you need to set up a third-party coverage tool to generate reports and configure SonarQube to import those reports.
Then on the same page under Importing .NET reports it says
To import .NET reports, the report generation process must be executed after the begin step and before the end MSBuild command
So sonarQube requires only a report to include coverage results in your analysis. It doesn’t care how the report is generated as long as it is in exepected format. Then why is it necessary to generate report between begin and end step. Can’t we generate report BEFORE the begin step and then reference the report path in the begin step?
The documentation for the Scanner for .NET says the order of operations to analyse C#/VB.NET code is begin- build - end. Since you have to build the the code before you can test, it follows that the .NET tests have to be be run between begin and end too.
The begin step has to be run before the build step as it affects what happens during the build. It fetches configuration information from the Sonar server that it passes to the build. It also triggers additional processing during the build to collect information about the MSBuild projects being analysed. The collected information is used in the end step.
We are using Jenkins CI/CD. If unit tests fail I don’t want Jenkin’s job continue building. For code coverage SonarQube only interested in the report. So I thought I can execute unit tests outside of begin and then wired-up the generated report to begin step.
So here are the step I am currently following and it seems to be working (but I am not sure if I am missing anything) Each step below is executed as Windows Batch Command
Step 1
Execute unit tests. This will build the unit test project & referenced projects and generate the code coverage report
dotnet test "%WORKSPACE%\Tests\My.UnitTests.csproj" --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
Step 2
Build the complete solution between begin and end step to analyze the code. ( This will also build unit test project as a part of complete build)
dotnet "C:\sonar-scanner-msbuild-5.5.3.43281-net5.0\SonarScanner.MSBuild.dll" begin /k:"MyKey" /d:sonar.host.url="http://myhost" /d:sonar.login="xxxx" /d:sonar.cs.opencover.reportsPaths="%WORKSPACE%\Tests\**\TestResults\*\coverage.opencover.xml"
dotnet build "%WORKSPACE%\MyComplete.sln" -nr:false
dotnet "C:\sonar-scanner-msbuild-5.5.3.43281-net5.0\SonarScanner.MSBuild.dll" end /d:sonar.login="xxx"