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

And*_*ent 16 c++ code-coverage visual-studio-2012

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

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

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

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

谢谢

Pet*_*ene 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
Run Code Online (Sandbox Code Playgroud)

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

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

CodeCoverage.exe analyze /output:results.xml foo.coverage
Run Code Online (Sandbox Code Playgroud)

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

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


atl*_*ste 5

我意识到这是一篇过时的文章,但我相信答案仍然很重要。

有了我过去在C#中可以使用的所有东西,我真的不喜欢迁移到Visual C ++时看到的东西。另外,像您一样,MSTests仅对我有用。我也曾经有自己的测试应用程序。

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

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

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

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

因此,我决定自己构建此插件,尽管它不如VSE复杂,但它可以为我解决问题。

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