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

atc*_*way 38 .net unit-testing nuget-package opencover reportgenerator

我是一个使用OpenCover和ReportGenerator的菜鸟,我在理解如何让它们工作方面有点挣扎.我正在使用VS.NET 2012'Professional',这意味着我无法访问内置的单元测试覆盖工具.我也安装了ReSharper,但不想在'dotCover'中支付另一个实用程序

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

一旦我安装了它们,我就会尝试获得单元测试覆盖率指标,并且程序包附带的文档并不像我希望的那样清晰.是否有任何好的博客文章或链接一起使用这些工具来获取指标?

Son*_*yar 45

您不需要将这些添加到特定项目

我使用报告生成器和打开封面来生成测试覆盖率结果.这是我用来使用opencover生成codecoverage的脚本

"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 \"/ resultfile:C:\ Reportport\MSTest\.trx"-filter:"+ [ ] "-mergebyhash -output:C:\报告\ MSTest的\ projectCoverageReport.xml

请注意,如果您的参数需要转义引号,即将带有空格的参数传递给该目标进程,那么您可以使用\"ie -targetargs:"\"c:\ program files \"

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

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

希望这可以帮助.


atc*_*way 13

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

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

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

使用OpenCover和ReportGenerator在.NET中获取单元测试代码覆盖率指标


Rob*_*.Ak 5

感谢@atconway为您的教程.我稍微更新了你的.bat脚本,以简化将来的升级和项目更改.

总而言之,要将OpenCover与NUnit一起使用,您必须向项目中添加以下内容:

  • OpenCover
  • NUnit.ConsoleRunner
  • 由Daniel Palme撰写的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%
Run Code Online (Sandbox Code Playgroud)