Comment puis-je utiliser OpenCover et ReportGenerator pour voir les résultats des tests unitaires?

Je ne suis pas du genre à utiliser à la fois OpenCover et ReportGenerator et j'ai un peu de mal à comprendre comment les faire fonctionner. J'utilise VS.NET 2012 "professionnel", c'est-à-dire que je n'ai pas accès à l'outillage de test unitaire intégré. J'ai aussi ReSharper installé, mais je ne veux pas payer pour un autre utilitaire dans 'dotCover'

il semble que OpenCover et ReportGenerator feront ce dont j'ai besoin et je vois la documentation qui a été téléchargée à côté, mais je manque un peu compréhension. 1er off, quand je télécharge les paquets nuget pour les deux, quel devrait être mon projet cible? J'ai une application multi-couches, donc je suppose que mon projet de test de l'unité est correct, ou est-ce que ça a de l'importance? Je vois dans la documentation, je pointe juste le /bin (je pense) d'une solution utilisant des commandes en ligne de commande, donc peut-être que je n'ai même pas besoin d'ajouter ces téléchargements à un projet particulier (ça aurait pu être un harnais de test). Quelqu'un peut-il me dire si j'ai bien fait?

une fois que je les ai installé, j'essaie d'obtenir des mesures de couverture des tests unitaires, et les docs qui sont venus avec le paquet ne sont pas aussi clairs que je l'espérais. Y a-t-il des bons billets de blog ou des liens qui se promènent en utilisant ces outils ensemble pour obtenir les mesures?

31
demandé sur atconway 2013-05-16 19:23:26

4 réponses

vous n'avez pas besoin de les ajouter à projet particulier

j'utilise le générateur de rapport et la couverture ouverte pour générer des résultats de couverture d'essai aussi. C'est le script que j'utilise pour générer le codecoverage en utilisant opencover

"C:\Program fichiers (x86)\OpenCover\OpenCover.Console.EXE" - register: user-target:"C:\Program fichiers (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe "- targetargs: "/noisolation / testcontainer:\"C:\\bin\Debug\.DLL\" /resultsfile: C:\Reports\MSTest\.trx" filtre:"+[]" -mergebyhash-output: C:\Reports\MSTest\projectcoverageport.xml

notez que si votre argument doit échapper à des guillemets, c'est-à-dire passer des arguments avec des espaces à ce processus cible, alors vous pouvez utiliser \" i.e.-targetargs:"\"c:\program files\"

c'est le script que j'utilise pour lancer report generator.

C:\ReportGenerator\bin\ReportGenerator.EXE - rapports:"C:\Reports\MSTest\projectCoverageReport.xml " - targetdir:"C:\Reports\CodeCoverage"

J'espère que cela vous aidera.

38
répondu SonalKhodiyar 2015-11-23 05:42:41

après plusieurs années d'utilisation de ces outils open source, j'ai finalement créé un poste complet sur la façon d'utiliser OpenCover et ReportCover pour générer des unités de mesure de couverture de test.

Le poste décrit comment créer le .bat le fichier et les commandes nécessaires pour effectuer les opérations suivantes:

  • générer un rapport de sortie des unités de mesure en utilisant OpenCover
  • Génération d'un .htm report using Report Generator
  • analyser les données de sortie pour interpréter les paramètres de couverture des essais unitaires

utiliser OpenCover et ReportGenerator pour obtenir des mesures de couverture du Code de test unitaire dans .NET

10
répondu atconway 2015-06-19 05:14:48

Merci @atconway pour votre tutoriel. J'ai mis à jour votre .bat script un peu, pour faciliter les mises à jour futures, et les changements de projet.

En résumé, pour utiliser OpenCover avec NUnit vous devez ajouter à votre projet ces nugets:

  • OpenCover
  • NUnit.ConsoleRunner
  • Report Generator by Daniel Palme

ici et est mis à jour .le fichier bat. Pour l'exécuter, éditez simplement "paramètres" et sauvegardez script sous .fichier bat dans la racine de votre projet.

@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%
4
répondu Rob.Ak 2017-03-31 12:24:56

c'est un enfer de configurer opencover pour plusieurs conteneurs de test.

utilisez ceci mon script Powershell intelligent, il peut vous donner quelques idées.

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

vous devez configurer deux choses majeures : comment trouver vos dlls de test et quels namespaces inclure à la sortie. Je le fais de cette façon:

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

notez que mes tests commencent à partir du préfixe Vse. Vous avez besoin de la Debug\Prefix touche pour filtrer le noyau nUnit tests à partir de dossiers comme Debug\netcore1.1\Vse.

0
répondu Roman Pokrovskij 2017-04-03 20:37:23