2013-05-16 74 views
27

我不喜欢使用OpenCover和ReportGenerator,我在理解如何让它们工作上有点挣扎。我正在使用VS.NET 2012'专业版',这意味着我无法访问内置的单元测试覆盖工具。我也安装了ReSharper,但不想为'dotCover'中的另一个实用程序支付费用如何使用OpenCover和ReportGenerator查看单元测试覆盖率结果?

看起来OpenCover和ReportGenerator会执行我所需要的操作,并且我看到一起下载的文档,但是缺少一些理解。第一次,当我下载两个nuget包装时,我的目标项目应该是什么?我有一个多层应用程序,所以我假设我的单元测试项目是正确的,或者它甚至重要?我在文档中看到,我只是用命令行命令指向/ bin(我认为)解决方案,所以也许我甚至不需要将这些下载文件添加到任何特定项目中(可能是测试工具)。有人可以告诉我,如果我有这个正确的?

一旦我安装了它们,我试图获得单元测试覆盖指标,并且随包提供的文档没有我希望的那么清晰。是否有任何好的博客文章或链接通过使用这些工具一起获取指标?

+1

我必须补充一点,OpenCover有史上最糟糕的文档之一! – Hamed

回答

37

你不需要这些内容添加到特定项目

我使用的报表生成和开盖生成测试覆盖率结果了。这是我使用使用opencover

生成代码覆盖率 “C:\ Program Files文件(x86)的\ OpenCover \ OpenCover.Console.exe” 的剧本 -register:用户-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” - 筛选: “+ []” -mergebyhash - 输出:C:\报告\ MSTest的\ projectCoverageReport.xml

请注意,如果你的论点需要逃跑报价,即通过无线网络连接参数那么你可以使用\“即-targetargs:”\“c:\ program files \”

这是我用来运行报告生成器的脚本。

C:\ ReportGenerator \ BIN \ ReportGenerator.exe -reports: “C:\报告\ MSTest的\ projectCoverageReport.xml” -targetdir: “C:\报告\代码覆盖率”

希望这有助于。

+0

是测试项目还是主项目的<您的项目路径>和<项目名称>? – reggaeguitar

+0

测试项目 – SonalKhodiyar

9

经过多年使用这些开源工具,我最终创建了一篇关于如何使用OpenCover和ReportCover生成单元测试覆盖率指标的综合文章。

的职位介绍如何创建.bat文件并执行以下操作所需的命令:

  • 生成使用OpenCover
  • 单元测试度量的输出报告生​​成使用ReportGenerator
  • 一个.htm报告分析输出数据以解释单位测试覆盖率度量标准

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

3

感谢@atconway为您的教程。 我已经更新了您的.bat脚本,以便于将来的升级和项目更改。

汇总,使用OpenCover与NUnit的,你必须添加到您的项目中的这些nugets:

  • OpenCover
  • NUnit.ConsoleRunner
  • ReportGenerator由丹尼尔·帕尔梅

,这里是更新.bat文件。 要运行它只需编辑“设置”并将脚本另存为项目根目录中的.bat文件即可。

@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

这是一个地狱,为多个测试容器配置opencover。

使用这个我的智能Powershell脚本,它可以给你一些想法。

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

您需要配置两个重要的事情:如何找到你的测试DLL和其命名空间包含到输出。我这样做:

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

请注意,我的测试从前缀Vse开始。您需要使用Debug\Prefix键来过滤来自Debug\netcore1.1\Vse等文件夹的核心nUnit测试。

相关问题