如何测量 CppUnit 测试覆盖率(在 win32 和 Unix 上)?
-
09-06-2019 - |
题
我有一个非常大的代码库,其中包含大量的单元测试(使用 CppUnit)。 我需要计算出这些测试执行了多少百分比的代码, ,并且(理想情况下)生成某种报告,告诉我每个库或每个文件的代码被执行了多少。
这是关键点:这必须完全无人值守地运行(最终在持续集成构建中),并且必须是跨平台的(至少是 WIN32 和 *nix)。
谁能推荐一个或一组工具来帮助我做到这一点?我无法放弃 CppUnit(我也不想这样做——它太糟糕了),但除此之外,我渴望听到您可能提出的任何建议。
干杯,
解决方案
我应该使用哪个工具?
这 文章描述 另一位开发人员在寻找 C++ 代码覆盖工具时遇到了困难。作者最终的解决方案是 靶心覆盖范围.
靶心覆盖范围 特征:
- 跨平台支持 (win32、unix 和嵌入式),(支持 linux gcc 编译器和 MSVC6)
- 便于使用 (几个小时内即可启动并运行)。
- 提供“最佳”指标: :函数覆盖率和条件/决策覆盖率。
- 使用源代码检测。
至于挂钩持续集成,这取决于您使用的 CI 解决方案,但您可能可以将仪器/覆盖率测量步骤挂钩到用于自动化测试的 make 文件中。
测试 Linux 与 Windows?
只要所有测试在两种环境中都能正确运行,您就应该能够很好地测量其中一种环境的覆盖率。(虽然出现了靶心 支持两个平台)。但为什么不在这两种环境中进行持续集成构建呢?如果您在两种环境中向客户交付,那么您 需要 两者都进行测试。
因此,听起来您可能需要设置两台连续构建服务器,一台用于 Linux 构建,一台用于 Windows 构建。也许这可以通过一些虚拟化软件轻松实现,例如 虚拟机 或者 虚拟盒. 。您可能不需要在两个操作系统上运行代码覆盖率指标,但您绝对应该在两个操作系统上运行单元测试。
其他提示
如果你可以使用 GNU海湾合作委员会 作为你的编译者,那么 冠状病毒 工具效果很好。整个过程完全自动化非常容易。
如果您使用 GCC 工具链,gcov 将为您提供源、功能和分支覆盖率统计信息。gcov 适用于 MinGW 和 Cygwin。这将使您能够获取覆盖率统计数据,并发出经过检测的源代码,使您能够可视化未执行的代码。
然而,如果你真的想用漂亮的报告来完成它,可以将 gcov 与 左旋病毒 是要走的路。lcov 将为您提供范围为文件和目录的条形报告、功能覆盖率统计数据以及用于显示覆盖率的颜色编码源文件浏览(绿色表示已执行,红色表示未执行...)。
lcov 在 Linux 上很容易,但在 Cygwin 上可能需要一些 Perl 破解。我个人在 Windows 上执行脚本(lcov 是用 perl 实现的)时遇到了一些问题。我已经得到了一个可以使用的破解版本,但请预先警告。
另一种方法是在 Windows 上执行 gcov 发出,并在 Linux 上执行 lcov 后处理,它肯定可以开箱即用。
看看我们的 SD C++ 测试覆盖率 工具。对于 GCC 和 MSVC6 都可以获得它。
它具有低开销的探测数据收集、覆盖在代码上的覆盖率数据的良好显示,以及跨方法/类/文件/目录级别的覆盖率汇总的完整报告生成。
编辑:2015 年 8 月:现在通过 Visual Studio 2015 支持 GCC5 和各种 MS 方言。要在 Linux 下使用这些工具,您需要 Wine,但这些工具提供了 Linux 原生 sh 脚本和基于 Linux/Java 的 UI,因此该工具感觉就像是原生 Linux 工具。
我想我应该指定编译器 - 我们在 Linux 上使用 gcc,在 WIn32 上使用 MSVC 6(是的,我知道,它很旧,但它(大部分)对我们有用)。
因此,gcov 不适用于我们的 Win32 构建,而 Bullseye 不适用于我们的 Linux 构建。
再说一遍,也许我只需要在一个操作系统中进行覆盖......