如何使用OpenCover和ReportGenerator查看单元测试覆盖率结果?(How do I

2019-09-03 18:41发布

我是一个小白同时使用OpenCover和ReportGenerator,我在了解如何让他们的工作挣扎了一下。 我用VS.NET 2012“专业”,这意味着我没有访问内置的单元测试覆盖率的工具。 我也有安装ReSharper的,但不想花钱购买“dotCover”其他实用工具

它看起来像OpenCover和ReportGenerator会做什么,我需要,我看这是一起下载的文件,但我错过了一些了解。 1日关闭,当我下载了双方的NuGet packges,应我的目标的项目是什么? 我有一个多层应用程序,所以我假设我的单元测试的项目是正确的,或者它甚至重要吗? 我看到的文档中,我只是在/ bin中指出使用命令行命令(我认为)的解决方案的,所以也许我甚至没有需要这些下载添加到任何特定项目(本来是一个测试工具)。 谁能告诉我,如果我有这正确吗?

一旦我安装它们,我试图让单元测试覆盖率指标,以及包装中附带的文档并不像我希望的那样清晰。 是否有良好的博客文章或通过使用这些工具一起拿到指标走链接?

Answer 1:

你不需要把这些东西加到特定项目

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

“C:\ Program Files文件(x86)的\ OpenCover \ OpenCover.Console.exe” -register:用户-target: “C:\ Program Files文件(x86)的\微软的Visual Studio 10.0 \ Common7 \ IDE \ mstest.exe” -targetargs : “/ noisolation / testcontainer:\” C:\\ BIN \调试\ .DLL \ “/resultsfile:C:\Reports\MSTest\.trx” -筛选: “+ []” -mergebyhash -output:C:\报告\ MSTest的\ projectCoverageReport.xml

请注意,如果你的论点需要转义引号,即与空格的参数传递给目标进程,那么你可以使用\“即-targetargs:‘\’C:\ Program Files文件\”

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

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

希望这可以帮助。



Answer 2:

经过几年的使用这些开源工具,我终于创建了如何使用OpenCover和ReportCover生成单元测试覆盖率指标的综合性岗位。

该文章描述了如何创建.bat文件,并执行以下操作所需的命令:

  • 生成使用OpenCover单元测试度量的输出报告
  • 生成.htm使用ReportGenerator报告
  • 分析输出数据解释单元测试覆盖度量

使用OpenCover和ReportGenerator获得在.NET的单元测试代码覆盖率度量



Answer 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%


Answer 4:

它是配置opencover多个测试容器地狱。

使用此我的智能PowerShell脚本,它可以给你一些想法。

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

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

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

请注意,我的测试从前缀Vse包含开始。 您需要Debug\Prefix键从文件夹一样过滤掉核心NUnit的测试Debug\netcore1.1\Vse



文章来源: How do I use OpenCover and ReportGenerator to view Unit Test Coverage Results?