2013-05-16 14 views
27

Sono un noob di utilizzare sia OpenCover e ReportGenerator e sto faticando un po 'a capire come farli funzionare. Sto usando VS.NET 2012 'Professional', il che significa che non ho accesso agli strumenti di copertura del test dell'unità incorporati. Ho anche installato ReSharper, ma non voglio pagare per un'altra utility in 'dotCover'Come utilizzare OpenCover e ReportGenerator per visualizzare i risultati della copertura del test unitario?

Sembra che OpenCover e ReportGenerator faranno ciò di cui ho bisogno e vedo la documentazione che è stata scaricata insieme, ma mi manca un po 'di comprensione . Prima di tutto, quando scarico i pacchetti di nuget per entrambi, quale dovrebbe essere il mio progetto target? Ho un'app multistrato, quindi presumo che il mio progetto di test dell'unità sia corretto, o addirittura importa? Vedo nella documentazione, sto solo indicando il/bin (penso) di una soluzione usando i comandi della riga di comando, quindi forse non avevo nemmeno bisogno di aggiungere questi download a un particolare progetto (potrebbe essere stato un cablaggio di prova). Qualcuno può dirmi se ho questo corretto?

Una volta installati, sto cercando di ottenere le metriche di copertura del test unitario e i documenti forniti con il pacchetto non sono chiari come speravo. Ci sono dei buoni post sul blog o link che utilizzano questo strumento insieme per ottenere le metriche?

+1

Devo aggiungere a questo che OpenCover ha una delle peggiori documentazioni di sempre! – Hamed

risposta

37

non è necessario aggiungere questi per particolare progetto

Io uso generatore di report e aprire il coperchio di generare risultati di copertura di prova troppo. Questo è lo script che uso per generare il codecoverage utilizzando opencover

"C: \ Program Files (x86) \ OpenCover \ OpenCover.Console.exe" -register: user -target: "C: \ Program Files (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: \ Reports \ MSTest \ projectCoverageReport.xml

Nota che se il vostro argomento ha bisogno di fuggire citazioni cioè per passare argomenti wi th spazi per quel processo di destinazione quindi è possibile utilizzare \ "i.e. -targetargs:" \ "c: \ program files \"

Questo è lo script che utilizzo per eseguire il generatore di report.

C: \ ReportGenerator \ bin \ ReportGenerator.exe -reports: "C: \ Reports \ MSTest \ projectCoverageReport.xml" -targetdir: "C: \ Reports \ CodeCoverage"

Speranza questo aiuta.

+0

È e per il progetto di prova o il progetto principale? – reggaeguitar

+0

Il progetto di test – SonalKhodiyar

9

Dopo diversi anni di utilizzo di questi strumenti open source, ho finalmente creato un post completo su come utilizzare OpenCover e ReportCover per generare metriche di copertura dei test unitari.

Il post descrive come creare il file .bat ei comandi necessari per effettuare le seguenti operazioni:

  • generare un report di output di metriche di unit test utilizzando OpenCover
  • Generazione di un rapporto .htm utilizzando ReportGenerator
  • Analisi dei dati di output per interpretare le metriche di copertura del test unitario

Using OpenCover and ReportGenerator to get Unit Testing Code Coverage Metrics in .NET

3

Grazie a @atconway per il tuo tutorial. Ho aggiornato un po 'lo script .bat per facilitare gli aggiornamenti futuri e le modifiche al progetto.

Riassumendo, per utilizzare OpenCover con NUnit è necessario aggiungere al progetto tali nugets:

  • OpenCover
  • NUnit.ConsoleRunner
  • ReportGenerator da Daniel Palme

e qui è file .bat aggiornato. Per eseguirlo basta modificare "impostazioni" e salvare lo script come file .bat nella radice del progetto.

@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% 
0

È un inferno configurare opencover per più contenitori di test.

Utilizzare questo mio script Powershell intelligente, può darvi alcune idee.

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

è necessario configurare due cose importanti: Come trovare le DLL di test e che namespace per includere all'uscita. Lo faccio in questo modo:

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

Nota, i miei test iniziano dal prefisso Vse. È necessaria la chiave Debug\Prefix per filtrare i test nucleo nUnit da cartelle come Debug\netcore1.1\Vse.