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

109

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

如果我必须使用第三方解决方案,那么这是一个好的选择吗?


使用 .Net Core?通过命令行生成 Html 报告 => https://dev59.com/BFEG5IYBdhLWcg3wN29K#73650005 - Gerardo Grignoli
7个回答

93

新的扩展版本现在可以在VS Gallery上获取。 https://visualstudiogallery.msdn.microsoft.com/6950a046-8919-4935-8542-c6f37956f688 - Toni Wenzel
2
OpenCover UI似乎不支持NUnit 3。 - Lennart
1
opencover.UI(与VS集成)具有非常混乱的报告(结果窗口),根本无法使用。直接转到opencover:http://www.allenconway.net/2015/06/using-opencover-and-reportgenerator-to.html - Roman Pokrovskij
3
最新版本 - 2016。不兼容现代Visual Studio。 - Alex from Jitbit
1
OpenCover 存储库现在是只读的。OpenCover 的作者建议使用 AltCover 替代:https://www.nuget.org/packages/altcover/ - Jean-Francois T.

48
如果你在使用 Visual Studio 2017 时遇到这个问题,可以考虑使用 AxoCover。它是一个免费的 VS 扩展程序,集成了 OpenCover,但支持 VS2017(似乎还在积极地开发中,加1)。 VS 扩展页面 https://github.com/axodox/AxoTools

10
值得注意的是,目前仅支持桌面版的 .NET - 也就是说,目前似乎不支持 .NET Core。 - Jay
6
截至2017年12月12日,仍不支持.NET Core / Xamarin。 - Hunter Tran
1
只是意识到我安装后没有 .NET Core。 :( 2018年8月 - default_noob_network
2
截至2019年3月,AxoCover仅支持XUnit 2.2及以下版本(已经超过两年),目前没有支持XUnit 2.3或2.4的计划。如果你希望运行XUnit测试,请不要浪费时间。 - Sean Werkema
2
到了2020年6月,上述评论仍然是真实的,可悲的是。 - Ε Г И І И О
1
截至本评论,AxoCover不支持VS2019。不幸的是,作者已经没有时间继续推进这个项目了。https://github.com/axodox/AxoCover/issues/203#issuecomment-508544391 - Jerther

39

Toni的答案非常有用,但是我认为对于像我这样的完全新手来说,需要一个快速入门指南来进行测试覆盖率评估。

如已经提到的那样,Visual Studio Professional和Community版本没有内置的测试覆盖支持。然而,可以相当容易地获得。我将编写逐步配置以在Visual Studio 2015专业版中使用NUnit测试。

  1. 使用NuGet界面安装OpenCover NUGet组件

  2. 获取OpenCoverUI扩展程序。这可以通过使用“工具”->“扩展和更新”直接从Visual Studio安装。

  3. 通过访问工具->选项->OpenCover.UI Options->General来配置OpenCoverUI使用适当的可执行文件

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

OpenCover路径:这应该指向已安装的包,通常是<solution path>\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe

  1. 安装ReportGenerator NUGet包

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

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

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

这涵盖了快速入门。如评论中已经提到的,有关更高级的配置和自动化,请查看这篇文章


12
这个扩展程序在VS 2019社区版上无法使用,真遗憾。 - nicolascolman
@nicolascolman 是的,但是良好的代码覆盖率似乎有效 - Alexei - check Codidact

10
任何想在Visual Studio Community 2019中寻找简单解决方案的人,可以使用Fine Code Coverage。它简单易用且效果良好,但无法给出精确的覆盖率数字,只能通过绿色/红色边框告诉您哪些行被覆盖。

2
这是一个很好的提示。然而,它只适用于.NET Core。 - Alexei - check Codidact
2
上面的评论声称这仅适用于.NET Core,但我使用它来处理.NET Framework Winforms项目没有问题。不确定自从那个评论编写以来是否已更新,但对于任何现在阅读的人来说,它似乎运行良好。 - Jberg
1
工作得很好,但非常非常慢。它“响应”测试资源管理器,在这里每次运行测试时更新需要长达一分钟的时间。这可能是由于底层组件(如Coverlet或其他组件)而不是FCC本身引起的。 - Jerther
Fine Code Coverage 的自述文件很糟糕。它需要类似于这个的东西:https://marketplace.visualstudio.com/items?itemName=ChrisDexter.RunCoverletReport - user1007074
对于VS 2022,有一个新的扩展:https://marketplace.visualstudio.com/items?itemName=FortuneNgwenya.FineCodeCoverage2022 - milos

6

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

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

示例报告:

enter image description here

虽然本文关注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

只是一点小提示:作者似乎没有更新这个答案中提到的市场链接。你可以从github获取最新版本。 - Andy

3

微软的 Visual Studio Enterprise 2022 拥有代码覆盖率功能,但我更喜欢 Fine Code Coverage

Fine Code Coverage 的一个特点是测试代码的高亮显示。你可以在这里看到: enter image description here

Visual Studio Enterprise 的代码覆盖率功能只有: Visual Studio 的代码覆盖率功能

enter image description here

内置覆盖工具的结果如下所示: enter image description here


2
专业版没有内置代码覆盖率。您发布的链接的要求部分说明需要企业版。 - midoriha_senpai
@midoriha_senpai,非常感谢您的反馈。我错误地安装了VS Enterprise,但现在我回到了Professional版本,并且确实没有代码覆盖率。我已经在帖子中进行了相应的更正。 - ping
在每个转折点分析所有测试可能会浪费您的时间。您还可以从“测试资源管理器”窗口运行代码覆盖率。右键单击“测试资源管理器”中的项目,然后选择分析代码覆盖率以分析特定类。 - Mustafa Özçetin

2
Microsoft Visual Studio Professional 2022拥有代码覆盖率功能。
但是,只有企业版才有此功能 :-(
Visual Studio的代码覆盖率功能:Code coverage feature of Visual Studio。
要求:代码覆盖率功能仅适用于Visual Studio Enterprise版。

2
现在是2023年,显而易见地微软仍然将代码覆盖率视为一种“奢侈品”和一个重要的功能,所以只在企业版中提供。而Eclipse则早已拥有这个基本且必要的功能! - Mustafa Özçetin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接