我有一个非常大的代码库,包含大量的单元测试(使用CppUnit)。 我需要弄清楚这些测试执行的代码百分比,并且(理想情况下)生成某种报告,告诉我每个库或每个文件,多少代码已被行使。
这是踢球者:这必须完全不受限制地运行(最终在持续集成构建中),并且必须是跨平台的(至少WIN32和* nix)。
有人可以建议一个可以帮我这么做的工具或工具吗?我不能改变CppUnit(我也不想 - 它踢屁股),但除此之外,我很想听听你的任何建议。
干杯,
答案 0 :(得分:13)
这{{}}}另外一些开发人员在寻找C ++代码覆盖工具时感到沮丧。作者的最终解决方案是article describes。
至于连接到您的持续集成,它取决于您使用的CI解决方案,但您可以将仪器/覆盖率测量步骤挂钩到用于自动测试的make文件中。
只要您的所有测试在两种环境中都能正确运行,您就可以很好地测量其中一种测试的覆盖率。 (虽然Bullseye出现Provides "best" metrics)。但为什么不在两种环境中进行持续集成构建?如果您在两种环境中交付给客户,那么您需要在两者中进行测试。
出于这个原因,听起来你可能需要设置两个连续的构建服务器,一个用于linux构建,一个用于windows构建。也许这可以通过一些虚拟化软件轻松完成,例如to support both platforms或vmware。您可能不需要在两个操作系统上运行代码覆盖率指标,但您肯定应该在两者上运行单元测试。
答案 1 :(得分:7)
答案 2 :(得分:3)
如果您正在使用GCC工具链,gcov将为您提供源,功能和分支覆盖统计信息。 gcov适用于MinGW和Cygwin。这将允许您获取覆盖率统计信息以及发出已检测的源代码,以便您可视化未执行的代码。
但是,如果你真的想通过漂亮的报道将它击出公园,那么将gcov与lcov结合使用是可行的方法。 lcov将为您提供范围为文件和目录的条形图报告,功能覆盖率统计信息和颜色编码的源文件浏览以显示覆盖范围(绿色表示已执行,红色表示不...)。
lcov在Linux上很容易,但可能需要对Cygwin进行一些perl黑客攻击。我个人在Windows上执行脚本(lcov在perl中实现)时遇到了一些问题。我已经得到了一个被黑客攻击的版本,但是要预先警告。
另一种方法是在Windows上执行gcov emit,并在Linux上执行lcov post处理,它肯定会开箱即用。
答案 3 :(得分:2)
查看我们的SD C++ Test Coverage工具。它可以用于GCC和MSVC6。
它具有较低的开销探测数据收集,覆盖在代码上的覆盖数据的良好显示,以及完整的报告生成以及方法/类/文件/目录级别上的覆盖汇总。
编辑:2015年8月:现在通过Visual Studio 2015支持GCC5和各种MS方言。要在Linux下使用这些工具,您需要Wine,但是这些工具提供Linux本机sh脚本和基于Linux / Java的UI,所以该工具感觉就像是原生的Linux工具。
答案 4 :(得分:0)
我想我应该已经指定了编译器 - 我们正在使用gcc for Linux,而MSVC 6(是的,我知道,它已经老了,但它对我们来说很有用)对于WIn32。
由于这个原因,gcov不适用于我们的Win32版本,而Bullseye不适用于我们的Linux版本。
然后我可能只需要在一个操作系统中进行覆盖...