65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 NUnit、OpenCover、ReportGenerator 和 Visual Studio 集成进行分支级别代码覆盖率

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.91/5 (6投票s)

2014年3月16日

CPOL

2分钟阅读

viewsIcon

19869

使用 NUnit、OpenCover、ReportGenerator 和 Visual Studio 集成进行分支级别代码覆盖率

引言

对于其中一个项目,我们需要生成分支级别代码覆盖率报告。Visual Studio 2012 支持使用不同的单元测试框架进行代码覆盖率分析。但 Visual Studio 无法生成分支级别代码覆盖率的详细信息。

我们正在使用 NUnit 作为项目的单元测试框架。因此,我们分析了适用于 .NET 项目的各种代码覆盖率工具。我们发现 OpenCover 与 ReportGenerator 是最佳选择,它具有完整的 NUnit 功能(NCover 尚未支持 TestCaseSource 属性)。

但它缺乏 IDE 集成。因此,我找到了一种从 Visual Studio 工具栏生成和调用报告的方法。

  1. 基本上,脚本首先调用 NUnit 单元测试工具。命令行控制台参考:http://www.nunit.org/index.php?p=consoleCommandLine&r=2.2.5
  2. OpenCover 捕获 NUnit 测试结果,并以 .XML 格式生成覆盖率报告。用法参考:https://github.com/OpenCover/opencover/wiki/Usage
  3. ReportGenerator 基于 OpenCover 的 Results.XML 生成 HTML 报告。用法参考:https://reportgenerator.codeplex.com/
  4. 调用在 coverage 子文件夹中创建的 HTML 摘要报告。

安装必要的 NuGet 包

  • NUnit.Runners
  • OpenCover
  • ReportGenerator
PM> install-package Nunit.Runners
PM> install-package OpenCover
PM> install-package ReportGenerator

创建要从 Visual Studio 调用Simple批处理文件

  1. 在单元测试项目中创建以下 .bat 文件,命名为 Coverage.bat
  2. 将“复制到输出目录”属性更改为“始终复制”值。这将文件复制到 bin 文件夹或单元测试项目。

注意:在此批处理文件中,将 OpenCover.4.5.2506ReportGenerator.1.9.1.0 替换为项目中部署的版本。

REM @echo suppresses command line. ^ is line continuation character
REM $(BinDir) is VS command line parameter of bin folder path of the selected project
@ECHO OFF
..\..\packages\OpenCover.4.5.2506\OpenCover.Console.exe ^
 -target:..\..\packages\NUnit.Runners.2.6.3\tools\nunit-console.exe ^
-targetargs:”<ASSEMBLY>.UnitTest.dll /noshadow /nologo” ^
-register:user ^
-filter:”+[<assembly>*]* -[<assembly>.DataModel]* -[<assembly>.UnitTest]* -[<assembly>.Diagrams]*” ^
-filter:-excludebyfile:*\*Designer.cs -mergebyhash
REM Default filters are: -[mscorlib]* -[mscorlib.*]* -[System]* -[System.*]* -[Microsoft.VisualBasic]*
REM delete old coverage files
REM /F /Q switches to delete files and directories even with readonly attribute without confirmation
DEL /F /Q .\coverage\*.*
REM Generate HTML based coverage reports
..\..\packages\ReportGenerator.1.9.1.0\reportgenerator.exe ^
 -reports:results.xml -targetdir:coverage Verbosity: Error
REM invoke the html coverage summary in browser
START “.\coverage\index.htm”

在 Visual Studio 中创建外部工具条目并在工具栏中

如以下屏幕截图所示,将“外部工具”配置为 bin 文件夹中的 Coverage.Bat。这将执行 IDE 中的命令,并将输出显示在 Visual Studio 的“输出”窗口中。

如果您将此配置为第一个外部工具,它将显示为“外部命令 7?(默认情况下,Visual Studio 预配置了 6 个外部工具)。您可以按照以下步骤将此菜单项添加到必要的工具栏(我配置到构建工具栏)。

示例输出

© . All rights reserved.