2013-05-16 8 views
27

Ich bin ein Anfänger zu OpenCover und ReportGenerator und ich habe ein wenig zu kämpfen, um zu verstehen, wie sie funktionieren. Ich benutze VS.NET 2012 'Professional', was bedeutet, dass ich keinen Zugriff auf die integrierte Testabdeckung der Unit habe. Ich habe auch ReSharper installiert, aber nicht für ein anderes Dienstprogramm in "dotCover"Wie verwende ich OpenCover und ReportGenerator, um Ergebnisse der Unit Test Coverage anzuzeigen?

bezahlen wollen Es sieht aus wie OpenCover und ReportGenerator tun, was ich brauche, und ich sehe die Dokumentation, die heruntergeladen wurde, aber mir fehlt etwas Verständnis . Zunächst einmal, wenn ich die kleinen Pakete für beide herunterlade, was sollte mein Zielprojekt sein? Ich habe eine Multilayer-App, also nehme ich an, dass mein Komponententest-Projekt korrekt ist, oder spielt es überhaupt eine Rolle? Ich sehe in der Dokumentation, dass ich nur auf das/bin (denke ich) einer Lösung mit Kommandozeilenbefehlen zeige, also musste ich diese Downloads vielleicht gar nicht zu einem bestimmten Projekt hinzufügen (hätte ein Test-Harness sein können)). Kann mir jemand sagen, ob ich das richtig finde?

Sobald ich sie installiert habe, versuche ich, Unit Test Coverage Metriken zu bekommen, und die Dokumente, die mit dem Paket kamen, sind nicht so klar wie ich gehofft hatte. Gibt es gute Blogposts oder Links, die diese Tools gemeinsam verwenden, um die Messwerte zu erhalten?

+1

Ich muss hinzufügen, dass OpenCover eine der schlimmsten Dokumentationen aller Zeiten hat! – Hamed

Antwort

37

Sie brauchen nicht diese besondere Projekt hinzuzufügen

I Report-Generator und offene Abdeckung verwenden, um zu Testabdeckung Ergebnisse zu erzeugen. Dies ist das Skript Ich verwende die Testabdeckung zu erzeugen, mit opencover

"C: \ Program Files (x86) \ OpenCover \ OpenCover.Console.exe" -Register: Benutzer -target: "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ mstest.exe "-targetargs:"/noisolation/testcontainer: \ "C: \\ bin \ Debug \ .dll \" /Ergebnisdatei: C: \ Reports \ MSTest \ .trx“-Filter: "+ []" -mergebyhash -Ausgang: C: \ Reports \ MSTest \ projectCoverageReport.xml

Beachten Sie, dass, wenn Ihr Argument Anführungszeichen Argumente wi passieren, dh entkommen muss th Räume zu diesem Zielprozess dann können Sie verwenden \ "d. h. -targetargs:" \ "c: \ program files \"

Dies ist das Skript, das ich zum Ausführen von Berichtgenerator verwenden.

C: \ Reportgenerator \ bin \ ReportGenerator.exe -Berichte: "C: \ Reports \ MSTest \ projectCoverageReport.xml" -targetdir: "C: \ Reports \ Testabdeckung"

Hoffnung das hilft.

+0

Ist und für das Testprojekt oder Hauptprojekt? – reggaeguitar

+0

Das Testprojekt – SonalKhodiyar

9

Nach mehreren Jahren der Verwendung dieser Open-Source-Tools, habe ich endlich einen umfassenden Beitrag zur Verwendung von OpenCover und ReportCover zur Generierung von Unit-Test-Coverage-Metriken erstellt.

Der Beitrag beschreibt, wie die .bat Datei und die Befehle erstellen benötigt folgendes zu tun:

  • Generieren Sie einen Ausgabebericht von Unit-Test-Metriken OpenCover mit
  • Generieren eines .htm Bericht mit Reportgenerator
  • Analysieren der Ausgabedaten zum Interpretieren von Einheitstestüberdeckungsmetriken

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

3

Dank @atconway für Ihr Tutorial. Ich habe Ihr .bat-Skript ein wenig aktualisiert, um zukünftige Upgrades und Projektänderungen zu erleichtern.

Summieren, mit NUnit zu verwenden OpenCover Sie diese nugets zu einem Projekt hinzufügen:

  • OpenCover
  • NUnit.ConsoleRunner
  • Reportgenerator von Daniel Palme

und hier ist aktualisierte .bat-Datei. Um es auszuführen, bearbeiten Sie einfach "Einstellungen" und speichern Sie das Skript als .bat-Datei im Stammverzeichnis Ihres Projekts.

@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

Es ist eine Hölle, Opencover für mehrere Testcontainer zu konfigurieren.

Verwenden Sie dieses intelligente Powershell-Skript, das Ihnen einige Ideen geben kann.

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

müssen Sie zwei wichtige Dinge konfigurieren: wie Sie Ihren Test-DLLs zu finden und welche Namespaces mit dem Ausgang aufzunehmen. Ich mache es so:

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

Hinweis, meine Tests beginnen mit Präfix Vse. Sie benötigen den Schlüssel Debug\Prefix, um Kern-nUnit-Tests aus Ordnern wie Debug\netcore1.1\Vse herauszufiltern.