繁体   English   中英

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

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

当我使用参数 vstest.console.exe App.Tests.dll /collect:"Code Coverage" /Logger:html /EnableCodeCoverage App.dll 运行 vstest.console.exe 时,它只会在结果 html 中生成测试执行报告。

在此处输入图像描述

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

概述

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

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

背景

  • 我有一个简单的 .NET 48 Web API 项目
  • 我有 Controller 个课程,我已经为这些课程编写了单元测试

添加对 OpenCover 的引用 NUGET package

我安装了 package opencover ,版本 4.7.1221 package 附带了我们将用于生成覆盖信息的命令行 exe C:\Users\username\.nuget\packages\opencover\4.7.1221\tools\OpenCover.console.exe

添加对 ReportGenerator 的引用 NUGET package

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

运行所有工具

设置环境变量

set VSTEST_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
set OPENCOVER_PATH=C:\Users\%USERNAME%\.nuget\packages\opencover\4.7.1221\tools\OpenCover.Console.exe
set REPORTGEN_PATH=C:\Users\%USERNAME%\.nuget\packages\reportgenerator\5.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文件,并在指定的output文件夹(COVERAGE_REPORT_DIR)中产生大量的HTML文件

对 OpenCover 工具有何期待?

一个大的 XML 文件 - 我无法理解! 在此处输入图像描述

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

HTML 个文件

在此处输入图像描述

Index.html

我们可以定位到我们的Controller班级。 在此处输入图像描述

详细的覆盖信息

单击index.html中的ValuesController行项目以查看详细的覆盖信息。 我们可以看到没有被测试的代码行。 在此处输入图像描述

测试覆盖率仅在 Visual Studio 的企业许可证中受支持。 您可以使用一些 3-rd 方工具:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM