16

我们想测量我们自己的自动化回归测试系统在相当大的本机应用程序上运行的代码覆盖率。这是一个复杂的脚本测试系统,使用我们应用程序的内置脚本。它有数千个测试,不会被 MSTest 单元测试取代。

虽然我们目前使用 VS2012 (Premium) 作为 IDE,但它仍然使用 VS2010 编译器和库进行编译。如果这是获得代码覆盖率的先决条件,那么这种情况可能会更快改变。

我们可以为此进行单独的构建——检测不是问题。

我只是对阅读 MS 文档感到困惑,这些文档似乎都是从假设您使用其内置测试框架运行单元测试开始的。那时我并没有努力寻找实际上首先谈论对 ALM 的本机支持的东西!

谢谢

4

2 回答 2

26

Visual Studio 2012 的代码覆盖工具完全独立于测试执行系统(完全披露:我编写了它,但在我离开微软后继承它的团队删除了一些相当有用的功能)。它在 VS 2012 中从头开始重写,以便在加载到进程中而不是修改磁盘上的可执行文件时动态检测本机代码(x86 和 x86-64)和托管代码(.NET 和 Silverlight)。

您可以在“%ProgramFiles%\Microsoft Visual Studio 11.0\Team Tools\Dynamic Code Coverage Tools”中找到 CodeCoverage.exe。

收集数据:

CodeCoverage.exe collect /output:foo.coverage foo.exe foos_args

可以指定一个配置文件(该目录中有一个名为 CodeCoverage.config 的默认文件)来控制收集。

要分析覆盖率数据,您可以在 Visual Studio 2012 中打开 foo.coverage 或使用覆盖率工具本身进行分析:

CodeCoverage.exe analyze /output:results.xml foo.coverage

注意:要进行检测,必须为您的模块发现 .pdb 文件。由于您使用 2010 进行构建,因此它们可能不适用于 2012 的 DIA,因此您可能必须使用 2012 的工具集进行重建。如果您在覆盖分析中没有看到您期望的模块,请传递/include_skipped_modules给分析命令;将有一个“原因”属性告诉您模块被跳过的原因(排除,没有调试信息等)。

编辑:另外,与以前版本的 Visual Studio 不同,2012 的覆盖文件格式是完全独立的。模块和 .pdb 不需要在分析时出现。

于 2013-02-21T05:30:53.633 回答
6

我意识到这是一个旧帖子,但我相信答案仍然是相关的。

以前我在 C# 中可以使用的所有东西,当我迁移到 Visual C++ 时,我真的不喜欢我所看到的。另外,像你一样,MSTests 只对我部分有用;我也习惯有自己的测试应用程序。

基本上我想要的是以下内容:

  • 运行 MS 测试或 EXE 文件
  • 直接在 Visual Studio 中获取代码覆盖率。

在做了一些研究之后,我注意到 VS Enterprise 现在通过测试适配器支持此功能。

如果您不在 VSE 上,我注意到还有一些其他工具,每个工具都为用户提供独立的 UI。我个人不喜欢那样;我希望我的覆盖范围在 Visual Studio 中,最好是在 Visual Studio 社区版中。

所以我决定自己构建这个插件 - 虽然它不像 VSE 那样复杂 - 它对我有用。

  • 我在https://github.com/atlaste/CPPCoverage上写了一个 VSIX 代码覆盖工具。基本上,它管理 Visual Studio 中的突出显示,生成可点击的报告,并集成在解决方案资源管理器中。
  • 对于覆盖率测量本身,我曾经使用https://opencppcoverage.codeplex.com/。基本上,这允许您对任何可调试(本机)可执行文件执行代码覆盖率测试。如今,我正在使用自己的代码覆盖率测量工具(上面也是开源的)。
于 2016-06-08T15:48:37.430 回答