ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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


P
Peter Mortensen

只有 Visual Studio 2015 Enterprise 内置了代码覆盖率。有关详细信息,请参阅 the feature matrix

您可以使用 OpenCover.UI extension 在 Visual Studio 中进行代码覆盖检查。它支持 MSTest、nUnit 和 xUnit。

可以从 here (release notes) 下载新版本。


新的扩展版本现已在 VS Gallery visualstudiogallery.msdn.microsoft.com/… 中提供
OpenCover UI 似乎不支持 NUnit 3
opencover.UI(与 VS 集成)具有非常混乱的报告(结果窗口),根本无法使用。直接去opencover:allenconway.net/2015/06/…
“最新版本 - 2016 年”。不适用于现代 Visual Studio
G
Gordon Bean

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

VS Extension page

https://github.com/axodox/AxoTools


值得注意的是,这(当前)仅支持 .NET 的桌面版本 - 即在撰写本文时似乎不支持 .NET Core。
2017 年 12 月 12 日,仍然不支持 .NET Core / Xamarin
对。没有.net 核心。我安装后才意识到。 :( 2018 年 8 月
截至 2019 年 3 月,AxoCover 也只支持到 xUnit 2.2(已经有两年多了),目前没有计划支持 xUnit 2.3 或 2.4。如果您希望运行 xUnit 测试,请不要打扰。
现在是 2020 年 6 月,可悲的是,上述评论仍然成立。
A
Alexei - check Codidact

Toni 的答案非常有用,但我认为这是一个让所有初学者快速开始测试覆盖率评估的方法(就像我一样)。

如前所述,Visual Studio 专业版和社区版没有内置的测试覆盖支持。但是,它可以很容易地获得。我将在 Visual Studion 2015 Professional 中编写用于 NUnit 测试的分步配置。

使用 NuGet 接口获取 OpenCoverUI 扩展安装 OpenCover NUGet 组件。这可以通过使用工具直接从 Visual Studio 安装 -> 扩展和更新 配置 OpenCoverUI 以使用适当的可执行文件,方法是访问工具 -> 选项 -> OpenCover.UI 选项 -> 常规

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

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

安装 ReportGenerator NUGet 包 从 OpenCover 菜单访问 OpenCover 测试资源管理器。尝试从那里发现测试。如果失败,请检查输出窗口以获取更多详细信息。检查 OpenCover 结果(在 OpenCover 菜单中)以获取更多详细信息。它将在基于树的视图中输出详细信息,例如代码覆盖率。您还可以突出显示已覆盖或未覆盖的代码(左上角的小图标)。

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

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


该扩展不适用于 VS 2019 社区。太遗憾了
@nicolascolman 是的,但是Fine Code Coverage seems work
B
Bas

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

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


这是一个很好的提示。但是,它仅适用于 .NET Core。
上面的评论声称这仅适用于 .NET Core,但我将它与 .NET Framework Winforms 项目一起使用没有问题。不确定自从写了该评论后它是否已更新,但对于现在阅读的任何人来说,它似乎运作良好。
效果很好,但非常非常慢。它对测试资源管理器“做出反应”,每次我运行测试时都需要一分钟的时间来更新。这可能是由于像被套之类的底层组件,而不是 FCC 本身。
O
Ogglas

如前所述,您可以使用将 coverlet output 可视化的 Fine Code Coverage。如果您创建 xunit test project (dotnet new xunit),您会发现 csproj 文件中已经存在 Coverlet 引用,因为 Coverlet 是每个 .NET Core 和 >= .NET 5 应用程序的默认覆盖工具。

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

示例报告:

https://i.stack.imgur.com/RH56M.png

虽然本文侧重于将 C# 和 xUnit 作为测试框架,但 MSTest 和 NUnit 也可以使用。

指导:

https://docs.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

p
ping

Microsoft Visual Studio Professional 2022 具有代码覆盖功能,但我更喜欢 Fine Code Coverage

https://i.stack.imgur.com/khuyf.png

Visual Studio 的代码覆盖率功能:Code coverage feature of Visual Studio

https://i.stack.imgur.com/BQOzA.png

https://i.stack.imgur.com/cCxh5.png


u
user19256035

Microsoft Visual Studio Professional 2022 具有代码覆盖功能

没有专业,只有企业:-(

Visual Studio 的代码覆盖率特性:Visual Studio 的代码覆盖率特性

要求:代码覆盖率功能仅在 Visual Studio 企业版中可用。