Visual Studio是否具有单元测试的代码覆盖率?

Álv*_*cía 67 unit-testing visual-studio-2015

我正在使用Visual Studio 2015社区版,我知道它可以选择创建单元测试来测试代码,但我没有看到测试代码覆盖率的选项,所以我想知道Visual Studio是否有此选项或如果我必须使用第三方插件.

如果我必须使用第三方解决方案,那会是一个不错的选择吗?

Ton*_*zel 68

只有Visual Studio 2015 Enterprise内置了代码覆盖率.有关详细信息,请参阅功能矩阵

您可以使用OpenCover.UI扩展来在Visual Studio中进行代码覆盖率检查.它支持MSTest,nUnit和xUnit.

新版本可以从这里下载(发行说明).

  • “最新版本 - 2016 年”。不适用于现代 Visual Studio (6认同)
  • OpenCover UI似乎不支持NUnit 3 (2认同)
  • OpenCover 存储库现在处于只读状态。OpenCover的作者推荐AltCover:https://www.nuget.org/packages/altcover/ (2认同)

Gor*_*ean 42

如果您使用的是Visual Studio 2017并遇到此问题,则可以考虑使用AxoCover.它是一个免费的VS扩展,集成了OpenCover,但支持VS2017(它似乎也在积极开发中.+ 1).

VS扩展页面

https://github.com/axodox/AxoTools

  • 值得注意的是,这(目前)仅支持.NET的桌面版本 - 即在撰写本文时似乎不支持.NET Core. (8认同)
  • 2017年12月12日,仍不支持.NET Core/Xamarin (5认同)
  • 截至 2019 年 3 月,AxoCover 也仅支持 xUnit 2.2(已经有两年多了),目前没有计划支持 xUnit 2.3 或 2.4。如果您希望运行 xUnit 测试,请不要打扰。 (2认同)
  • 现在已经是 2020 年 6 月了,可悲的是,上述评论仍然成立。 (2认同)

Ale*_*xei 30

Toni答案非常有用,但我认为初学者可以快速开始测试覆盖率评估(就像我一样).

如前所述,Visual Studio Professional和Community Edition没有内置的测试覆盖支持.但是,它很容易获得.我将编写逐步配置,以便与Visual Studion 2015 Professional中的NUnit测试一起使用.

  1. 使用NuGet接口安装OpenCover NUGet组件

  2. 获取OpenCoverUI扩展.可以使用"工具" - >"扩展和更新"直接从Visual Studio安装

  3. 通过访问工具 - >选项 - > OpenCover.UI选项 - >常规,配置OpenCoverUI以使用适当的可执行文件

NUnit路径:必须指向`nunit-console.exe文件.这只能在NUnit 2.xx版本中找到,可以从这里下载.

OpenCover Path:通常应该指向已安装的软件包<solution path>\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe

  1. 安装ReportGenerator NUGet包

  2. OpenCover Test Explorer从OpenCover菜单访问.尝试从那里发现测试.如果失败,请检查输出窗口以获取更多详细信息.

  3. 检查OpenCover结果(在OpenCover菜单中)以获取更多详细信息.它将在基于树的视图中输出代码覆盖率等详细信息.您还可以突出显示或未覆盖的代码(左上角的小图标).

注意:如上所述,OpenCoverUI不支持NUnit(3.xx)的最新主要版本.但是,如果在测试中没有使用此版本的任何特定内容,则无论是否安装了NUnit 3.xx版本,它都可以正常工作.

这涵盖了快速入门.正如评论中已经提到的,对于更高级的配置和自动化,请查看本文.

  • 该扩展不适用于 VS 2019 社区。真可惜 (11认同)

小智 10

对于在 Visual Studio Community 2019 中寻找简单解决方案的任何人来说,Fine Code Coverage很简单,但效果很好。

它无法给出精确覆盖范围的准确数字,但它会告诉哪些线被绿色/红色排水沟覆盖。

  • 这是一个很好的提示。但是,它仅适用于 .NET Core。 (2认同)
  • 上面的评论声称这只适用于 .NET Core,但我将它与 .NET Framework Winforms 项目一起使用没有问题。不确定自该评论撰写以来它是否已更新,但对于现在阅读的任何人来说,它似乎运作良好。 (2认同)

Ogg*_*las 7

正如已经提到的,您可以使用Fine Code Coverage来可视化Coverlet 输出。如果您创建xunit test project( dotnet new xunit),您会发现文件中已存在 Coverlet 参考,csproj因为Coverlet它是每个 .NET Core 和 >= .NET 5 应用程序的默认覆盖工具。

Microsoft 有一个使用ReportGenerator的示例,该示例将 coverlet、OpenCover、dotCover、Visual Studio、NCover、Cobertura、JaCoCo、Clover、gcov 或 lcov 生成的覆盖率报告转换为各种格式的人类可读报告。

报告示例:

在此输入图像描述

虽然本文重点介绍 C# 和 xUnit 作为测试框架,但 MSTest 和 NUnit 也都可以使用。

指导:

https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-code-coverage?tabs=windows#generate-reports

如果您希望 .xml 文件中的代码覆盖率,您可以运行以下任意命令:

dotnet test --collect:"XPlat Code Coverage"

dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
Run Code Online (Sandbox Code Playgroud)