Quiero mostrar la cobertura de prueba para mis pruebas unitarias de .NET 5 en mi instancia local de SonarQube (en Windows).
dotnet sonarscanner begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<token>" /d:sonar.cs.opencover.reportsPaths="**\TestResults\*\*.xml" dotnet build dotnet test --no-build --collect:"XPlat Code Coverage" dotnet sonarscanner end /d:sonar.login="<token>" El comando dotnet test genera los informes de coverage.cobertura.xml como archivos de cobertura.cobertura.xml en la <TestProjectDir>.TestResults\<some-guid>\ .
En los registros puedo ver la siguiente advertencia: WARN: Could not import coverage report '<MyTestProject>\TestResults\a4af5812-7f80-469b-8876-3ea0c7c4c98d\coverage.cobertura.xml' because 'Missing root element <CoverageSession> in C:\Users\<Path>\TestResults\a4af5812-7f80-469b-8876-3ea0c7c4c98d\coverage.cobertura.xml at line 2'. Troubleshooting guide: https://community.sonarsource.com/t/37151
Siguiendo el vínculo del mensaje de advertencia, puedo ver que solo se admiten Visual Studio Code Coverage , dotCover y OpenCover/Coverlet . Por lo que puedo decir de su página de GitHub , OpenCover/Coverlet es "XPlat Code Coverage".
En mis proyectos de prueba, está instalado el paquete coverlet.collector coverlet.collector v 3.0.3.
¿Qué me estoy perdiendo?
Encontré esta pregunta relacionada: SonarQube: No se puede importar la cobertura de prueba, pero no me ayuda porque no puedo usar dotCover .
Después de mucho ensayo y error, aquí está la solución que funcionó para mí.
Tuve que instalar la última versión de dotnet-sonarscanner y dotnet-reportgenerator-globaltool para que esto funcionara. Ya tenía instalado el generador de informes, pero necesitaba actualizarlo para usar el tipo de informe de SonarQube.
dotnet tool install --global dotnet-sonarscanner --version 5.2.0 dotnet tool update dotnet-reportgenerator-globaltool -g --version 4.8.7 Con el generador de informes, los archivos de cobertura se pueden convertir al formato reportgenerator .
dotnet sonarscanner begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<token>" /d:sonar.coverageReportPaths=".\sonarqubecoverage\SonarQube.xml" dotnet build dotnet test --no-build --collect:"XPlat Code Coverage" reportgenerator "-reports:*\TestResults\*\coverage.cobertura.xml" "-targetdir:sonarqubecoverage" "-reporttypes:SonarQube" dotnet sonarscanner end /d:sonar.login="<token>"Formatos de archivo compatibles con el generador de informes: https://github.com/danielpalme/ReportGenerator#supported-input-and-output-file-formats
Formato de datos de prueba genéricos de SonarQube: https://docs.sonarqube.org/latest/analysis/generic-test/
Creo que el problema es que está tratando de importar pruebas de opencover pero las pruebas están en formato de cobertura. Puede hacer este comando en su lugar para sus pruebas:
dotnet test --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencoverY probablemente funcionaría.