我是使用OpenCover和ReportGenerator的小伙子,我在理解如何让它们工作方面有点挣扎。我正在使用VS.NET 2012'Professional',这意味着我无法访问内置的单元测试覆盖工具。我也安装了ReSharper,但不想在'dotCover'
中支付另一个实用程序看起来OpenCover和ReportGenerator会做我需要的工作,我会看到同时下载的文档,但我缺少一些理解。第一关,当我为两者下载nuget包时,我的目标项目应该是什么?我有一个多层应用程序,所以我假设我的单元测试项目是正确的,或者甚至是否重要?我在文档中看到,我只是使用命令行命令指向/ bin(我认为)解决方案,所以也许我甚至不需要将这些下载添加到任何特定项目(可能是测试工具) )。有人可以告诉我,如果我有这个吗?
一旦我安装了它们,我就会尝试获得单元测试覆盖率指标,而且程序包附带的文档并不像我希望的那样清晰。是否有任何好的博客文章或链接可以一起使用这些工具来获取指标?
答案 0 :(得分:43)
您无需将这些添加到特定项目
我使用报告生成器和打开封面来生成测试覆盖率结果。这是我用来使用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 \” /resultsfile:C:\Reports\MSTest\.trx“-filter:”+ [] “ -mergebyhash -output:C:\ Reports \ MSTest \ projectCoverageReport.xml
请注意,如果您的参数需要转义引号,即将带有空格的参数传递给该目标进程,那么您可以使用\“ie -targetargs:”\“c:\ program files \”
这是我用来运行报告生成器的脚本。
C:\ ReportGenerator \ BIN \ ReportGenerator.exe -reports:“C:\ Reports \ MSTest \ projectCoverageReport.xml”-targetdir:“C:\ Reports \ CodeCoverage”
希望这有帮助。
答案 1 :(得分:13)
经过几年使用这些开源工具,我终于创建了一篇关于如何使用OpenCover和ReportCover生成单元测试覆盖率指标的综合文章。
该帖子描述了如何创建.bat
文件以及执行以下操作所需的命令:
.htm
报告Using OpenCover and ReportGenerator to get Unit Testing Code Coverage Metrics in .NET
答案 2 :(得分:5)
感谢@atconway为您的教程。 我稍微更新了你的.bat脚本,以便于将来升级和项目更改。
总结一下,要将OpenCover与NUnit配合使用,您必须向项目中添加以下内容:
这里是更新的.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%
答案 3 :(得分: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测试。