如何衡量CppUnit测试覆盖率(在win32和Unix上)?

时间:2008-08-28 18:40:00

标签: c++ unit-testing cross-platform code-coverage cppunit

我有一个非常大的代码库,包含大量的单元测试(使用CppUnit)。 我需要弄清楚这些测试执行的代码百分比,并且(理想情况下)生成某种报告,告诉我每个库或每个文件,多少代码已被行使。

这是踢球者:这必须完全不受限制地运行(最终在持续集成构建中),并且必须是跨平台的(至少WIN32和* nix)。

有人可以建议一个可以帮我这么做的工具或工具吗?我不能改变CppUnit(我也不想 - 它踢屁股),但除此之外,我很想听听你的任何建议。

干杯,

5 个答案:

答案 0 :(得分:13)

我应该使用哪种工具?

这{{}}}另外一些开发人员在寻找C ++代码覆盖工具时感到沮丧。作者的最终解决方案是article describes

Bullseye Coverage功能:

至于连接到您的持续集成,它取决于您使用的CI解决方案,但您可以将仪器/覆盖率测量步骤挂钩到用于自动测试的make文件中。


测试Linux与Windows?

只要您的所有测试在两种环境中都能正确运行,您就可以很好地测量其中一种测试的覆盖率。 (虽然Bullseye出现Provides "best" metrics)。但为什么不在两种环境中进行持续集成构建?如果您在两种环境中交付给客户,那么您需要在两者中进行测试。

出于这个原因,听起来你可能需要设置两个连续的构建服务器,一个用于linux构建,一个用于windows构建。也许这可以通过一些虚拟化软件轻松完成,例如to support both platformsvmware。您可能不需要在两个操作系统上运行代码覆盖率指标,但您肯定应该在两者上运行单元测试。

答案 1 :(得分:7)

如果您可以使用GNU GCC作为编译器,则gcov工具可以正常运行。完全自动化整个过程非常容易。

答案 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版本。

然后我可能只需要在一个操作系统中进行覆盖...