如何使用vstest.console.exe生成线路覆盖率报告?

How to generate line coverage report with vstest.console.exe?

当我运行vstest.console.exe带参数时,vstest.console.exeApp.Tests.dll/collect:"Code Coverage"/Logger:html/EnableCodeCoverageApp.dll,它只在结果html.

中生成测试执行报告

是否也可以使用此工具生成线路覆盖率报告,还是我需要更多工具? 当我在 C# 中搜索行覆盖时,它带我到 https://docs.microsoft.com/en-us/visualstudio/test/using-code-coverage-to-determine-how-much-code-is-being-tested?view=vs-2019,而这个建议 vstest.console.exe,但它不会生成行覆盖。

只有 Visual Studio 的企业许可证支持测试覆盖率。 您可以使用一些第 3 方工具:

  1. dotCover - 付费。 ReSharper 套件的一部分
  2. openCover - 开源。

概览

This article对我帮助很大。尽管如此,我正在为后代复制这里的步骤。我通过模拟使用以下工具找到了我的解决方案。

  • vstest.console.exe(VS.NET 2019 社区版)
  • OpenCover(通过 NUGET)
  • ReporGenerator(通过 NUGET)

背景

  • 我有一个简单的 .NET 48 Web API 项目
  • 我有 Controller 类 并且我已经针对这些 类
  • 编写了单元测试

添加对 OpenCover NUGET 包的引用

我安装了软件包 opencover,版本 4.7.1221 该软件包附带命令行 exe,我们将使用它来生成覆盖率信息 C:\Users\username\.nuget\packages\opencover.7.1221\tools\OpenCover.console.exe

添加对 ReportGenerator NUGET 包的引用

我安装了软件包 ReportGenerator ,版本 5.1.6。该软件包附带命令行 exe,我们将使用它生成可读的 HTML 报告,报告由 OpenCover.console.exe 工具生成的代码覆盖率信息 C:\Users\username\.nuget\packages\reportgenerator.1.6\tools\net47\ReportGenerator.exe

运行使用所有工具

设置环境变量

set VSTEST_PATH=C:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
set OPENCOVER_PATH=C:\Users\%USERNAME%\.nuget\packages\opencover.7.1221\tools\OpenCover.Console.exe
set REPORTGEN_PATH=C:\Users\%USERNAME%\.nuget\packages\reportgenerator.1.6\tools\net47\ReportGenerator.exe


set COVERAGE_RESULTS_FILE=C:\work\code-coverage\mycodecoverage.xml
set COVERAGE_REPORT_DIR=C:\work\code-coverage\myreport

运行生成代码覆盖率信息的opencover工具

%OPENCOVER_PATH% -target:"%VSTEST_PATH%" -targetargs:C:\work\WebApp48\WebApplicationGenic\WebApplication1.Tests\bin\Debug\WebApplication1.Tests.dll -filter:"+[WebApplication1]*" -output:%COVERAGE_RESULTS_FILE%
%REPORTGEN_PATH%  -reports:%COVERAGE_RESULTS_FILE% -targetdir:%COVERAGE_REPORT_DIR%

使用 ReportGenerator 工具生成报告

%REPORTGEN_PATH%  -reports:%COVERAGE_RESULTS_FILE% -targetdir:%COVERAGE_REPORT_DIR%

生成的文件是什么?

  • OpenCover 会将覆盖信息写入 XML 文件(COVERAGE_RESULTS_FILE)
  • ReportGenerator 工具将使用此 XML 文件并在指定的输出文件夹中生成大量 HTML 文件(COVERAGE_REPORT_DIR )

对 OpenCover 工具有何期待?

一个大 XML 文件 - 我无法理解!

对报告生成器工具有何期待?

HTML 个文件

Index.html

我们可以找到我们的控制器 类。

详细的报道信息

单击 index.html 中的 ValuesController 行项目以查看详细的覆盖信息。我们可以看到没有被测试的代码行。