我们可以在没有MSTest的VS2012或VS2010中获得本机C ++代码覆盖吗?

时间:2013-02-20 15:02:18

标签: c++ visual-studio-2012 code-coverage

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

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

我们可以为此做单独的构建 - 仪器不是问题。

我只是在阅读MS文档时感到困惑,这似乎都是从假设您使用内置测试框架运行单元测试开始的。那时候我不是在努力寻找真正谈论ALM原生支持的东西!

感谢

2 个答案:

答案 0 :(得分:26)

Visual Studio 2012的代码覆盖率工具完全独立于测试执行系统(完全披露:我写了它,但是在我离开Microsoft之后继承它的团队删除了一些相当有用的功能)。它在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或使用coverage工具本身进行分析:

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

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

编辑:此外,与以前版本的Visual Studio不同,2012年的覆盖文件格式完全是自包含的。模块和.pdbs不需要在分析时出现。

答案 1 :(得分:4)

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

在C#中,我曾经拥有的所有东西都可供我使用,但我并不像我在迁移到Visual C ++时所看到的那样。另外,和你一样,MSTests只为我部分工作;我以前也有我自己的测试应用程序。

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

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

在做了一些研究后,我注意到VS Enterprise今天支持测试适配器。

如果您不在VSE上,我注意到还有一些其他工具,每个工具都为用户提供独立的用户界面。就个人而言,我不喜欢这样;我想在Visual Studio中进行覆盖,最好是在Visual Studio社区版中。

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

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