visual unitarias unit test studio run results pruebas coverage codigo code .net unit-testing nuget-package opencover reportgenerator

.net - unitarias - unit test coverage visual studio



¿Cómo uso OpenCover y ReportGenerator para ver los resultados de la cobertura de prueba unitaria? (4)

Después de varios años de usar estas herramientas de código abierto, finalmente creé una publicación completa sobre cómo usar OpenCover y ReportCover para generar métricas de cobertura de pruebas unitarias.

La publicación describe cómo crear el archivo .bat y los comandos necesarios para hacer lo siguiente:

  • Genere un informe de salida de métricas de prueba unitaria utilizando OpenCover
  • Generando un informe .htm usando ReportGenerator
  • Análisis de los datos de salida para interpretar métricas de cobertura de prueba unitaria

Uso de OpenCover y ReportGenerator para obtener métricas de cobertura de código de pruebas unitarias en .NET

Soy un novato en el uso de OpenCover y ReportGenerator y me cuesta un poco entender cómo hacer que funcionen. Estoy usando VS.NET 2012 ''Professional'', lo que significa que no tengo acceso a las herramientas integradas de cobertura de prueba unitaria. También tengo instalado ReSharper, pero no quiero pagar por otra utilidad en ''dotCover''

Parece que OpenCover y ReportGenerator harán lo que necesito y veo la documentación que se descargó al mismo tiempo, pero me falta algo de comprensión. En primer lugar, cuando descargo los paquetes nuget para ambos, ¿cuál debería ser mi proyecto objetivo? Tengo una aplicación de múltiples capas, así que asumo que mi proyecto de prueba de unidad es correcto, ¿o incluso importa? Veo en la documentación, solo señalo el / bin (creo) de una solución que usa comandos de línea de comandos, así que tal vez ni siquiera necesité agregar estas descargas a ningún proyecto en particular (podría haber sido un arnés de prueba). ). ¿Alguien puede decirme si tengo esto correcto?

Una vez que los instalé, estoy tratando de obtener métricas de cobertura de prueba unitaria, y los documentos que vienen con el paquete no son tan claros como esperaba. ¿Hay alguna buena publicación en el blog o enlaces que utilicen esta herramienta para obtener las métricas?


Es un infierno configurar Opencover para múltiples contenedores de prueba.

Use este script inteligente de Powershell, puede darle algunas ideas.

https://github.com/rpokrovskij/opencover4vs.ps1/blob/master/opencover4vs.ps1

necesita configurar dos cosas principales: cómo encontrar sus dlls de prueba y qué espacios de nombres incluir en la salida. Lo hago de esta manera:

$TestDllsPatterns = @(,''*/bin/Debug/Vse.*.Test.dll'') $TestableCodeNamespacePatterns = @(,''*'')

Tenga en cuenta, mis pruebas se inicia desde el prefijo Vse. Necesita la clave Debug/Prefix para filtrar las pruebas básicas de nUnit de carpetas como Debug/netcore1.1/Vse .


Gracias @atconway por tu tutorial. He actualizado un poco su script .bat para facilitar futuras actualizaciones y cambios de proyecto.

Resumiendo, para usar OpenCover con NUnit debe agregar a su proyecto estos nugets:

  • OpenCover
  • NUnit.ConsoleRunner
  • ReportGenerator por Daniel Palme

y aquí se actualiza el archivo .bat. Para ejecutarlo, simplemente edite la "configuración" y guarde el script como archivo .bat en la raíz de su proyecto.

@echo off REM ** Be sure to install these nugets: REM ** NUnit.ConsoleRunner REM ** OpenCover REM ** ReportGenerator REM ** REM ** All paths should be entered without quotes REM ** SET TestResultsFileProjectName=CalculatorResults SET TestResultsFileProjectName=<ANY_NAME> REM ** SET DLLToTestRelativePath=Calculator/bin/Debug/MyCalc.dll SET DLLToTestRelativePath=<VALID_PATH> REM ** Filters Wiki https://github.com/opencover/opencover/wiki/Usage REM ** SET Filters=+[Calculator]* -[Calculator]CalculatorTests.* SET Filters=<VALID_FILTERS> SET OpenCoverFolderName=OpenCover.4.6.519 SET NUnitConsoleRunnerFolderName=NUnit.ConsoleRunner.3.6.1 SET ReportGeneratorFolderName=ReportGenerator.2.5.6 REM ***************************************************************** REM Create a ''GeneratedReports'' folder if it does not exist if not exist "%~dp0GeneratedReports" mkdir "%~dp0GeneratedReports" REM Remove any previous test execution files to prevent issues overwriting IF EXIST "%~dp0%TestResultsFileProjectName%.trx" del "%~dp0%TestResultsFileProjectName%.trx%" REM Remove any previously created test output directories CD %~dp0 FOR /D /R %%X IN (%USERNAME%*) DO RD /S /Q "%%X" REM Run the tests against the targeted output call :RunOpenCoverUnitTestMetrics REM Generate the report output based on the test results if %errorlevel% equ 0 ( call :RunReportGeneratorOutput ) REM Launch the report if %errorlevel% equ 0 ( call :RunLaunchReport ) exit /b %errorlevel% :RunOpenCoverUnitTestMetrics "%~dp0packages/%OpenCoverFolderName%/tools/OpenCover.Console.exe" ^ -register:user ^ -target:"%~dp0packages/%NUnitConsoleRunnerFolderName%/tools/nunit3-console.exe" ^ -targetargs:"--noheader /"%~dp0%DLLToTestRelativePath%/"" ^ -filter:"%Filters%" ^ -mergebyhash ^ -skipautoprops ^ -excludebyattribute:"System.CodeDom.Compiler.GeneratedCodeAttribute" ^ -output:"%~dp0GeneratedReports/%TestResultsFileProjectName%.xml" exit /b %errorlevel% :RunReportGeneratorOutput "%~dp0packages/%ReportGeneratorFolderName%/tools/ReportGenerator.exe" ^ -reports:"%~dp0GeneratedReports/%TestResultsFileProjectName%.xml" ^ -targetdir:"%~dp0GeneratedReports/ReportGenerator Output" exit /b %errorlevel% :RunLaunchReport start "report" "%~dp0GeneratedReports/ReportGenerator Output/index.htm" exit /b %errorlevel%


No es necesario agregarlos a un proyecto en particular.

Utilizo el generador de informes y la cubierta abierta para generar resultados de cobertura de prueba también. Este es el script que uso para generar el codecoverage usando opencover

"C: / Archivos de programa (x86) / OpenCover / OpenCover.Console.exe" -registro: usuario -target: "C: / Archivos de programa (x86) / Microsoft Visual Studio 10.0 / Common7 / IDE / mstest.exe" -targetargs : "/ noisolation / testcontainer: /" C: // bin / Debug / .dll / "/resultsfile:C:/Reports/MSTest/.trx" -filter: "+ [ ] " -mergebyhash -output: C: / Informes / MSTest / projectCoverageReport.xml

Tenga en cuenta que si su argumento necesita escapar de comillas, es decir, pasar argumentos con espacios a ese proceso objetivo, puede usar / "ie -targetargs:" / "c: / program files /"

Este es el script que utilizo para ejecutar el generador de informes.

C: / ReportGenerator / bin / ReportGenerator.exe -reporta: "C: / Reports / MSTest / projectCoverageReport.xml" -targetdir: "C: / Reports / CodeCoverage"

Espero que esto ayude.