我有一个非常大的代码库,其中包含大量的单元测试(使用 CppUnit)。我需要计算出这些测试执行了多少代码,并且(理想情况下)生成某种报告,告诉我基于每个库或每个文件,执行了多少代码。
这是踢球者:这必须完全无人看管地运行(最终在持续集成构建中),并且必须是跨平台的(嗯,至少是 WIN32 和 *nix)。
任何人都可以建议一个工具或一组工具来帮助我做到这一点吗?我不能改变 CppUnit(我也不想 - 它踢屁股),但否则我很想听听你可能有的任何建议。
干杯,
我有一个非常大的代码库,其中包含大量的单元测试(使用 CppUnit)。我需要计算出这些测试执行了多少代码,并且(理想情况下)生成某种报告,告诉我基于每个库或每个文件,执行了多少代码。
这是踢球者:这必须完全无人看管地运行(最终在持续集成构建中),并且必须是跨平台的(嗯,至少是 WIN32 和 *nix)。
任何人都可以建议一个工具或一组工具来帮助我做到这一点吗?我不能改变 CppUnit(我也不想 - 它踢屁股),但否则我很想听听你可能有的任何建议。
干杯,
本文描述了另一个开发人员在搜索 C++ 代码覆盖工具时遇到的挫折。作者的最终解决方案是Bullseye Coverage。
靶心覆盖功能:
至于挂钩到您的持续集成,这取决于您使用的 CI 解决方案,但您可能会将仪器/覆盖测量步骤挂钩到您用于自动化测试的 make 文件中。
只要您的所有测试在两种环境中都正确运行,您就应该可以很好地衡量其中一种环境的覆盖率。(虽然 Bullseye 似乎支持这两个平台)。但是你为什么不在这两种环境中进行持续集成构建呢?如果您在两种环境中都向客户交付,那么您需要在两种环境中都进行测试。
出于这个原因,听起来您可能需要设置两台连续构建服务器,一台用于 linux 构建,一个用于 windows 构建。也许这可以通过一些虚拟化软件(如vmware或virtualbox )轻松完成。您可能不需要在两个操作系统上运行代码覆盖率指标,但绝对应该在这两个操作系统上运行单元测试。
如果您使用 GCC 工具链,gcov 将为您提供源代码、功能和分支覆盖率统计信息。gcov 适用于 MinGW 和 Cygwin。这将允许您获取覆盖率统计信息以及发出允许您可视化未执行代码的检测源代码。
然而,如果你真的想用漂亮的报告把它从公园里打出来,那么将 gcov 与lcov结合使用是最好的选择。lcov 将为您提供范围为文件和目录的条形报告、功能覆盖率统计信息以及颜色编码的源文件浏览以显示覆盖率(绿色表示已执行,红色表示未...)。
lcov 在 Linux 上很容易,但在 Cygwin 上可能需要一些 perl hack。我个人在 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 构建。
再说一次,也许我只需要一个操作系统的覆盖范围......