c++ - 我如何从终端的谷歌测试套件中获取 C++ 代码超量?

标签 c++ unit-testing continuous-integration code-coverage

我已经开始使用我正在构建到 CI 管道中的 Google Test 单元测试工具。是否有在 shell 中运行并允许我设置阈值并将其作为作业添加到管道中的代码覆盖工具?

作为引用,我来自 NodeJS 背景并使用如下管道:

  1. 短绒(eslint)
  2. 单元测试( Jasmine )
  3. 代码覆盖率(istanbul coverage && istanbul check-coverage)

我正在努力解决的问题是第三步。在 NodeJS 中,我可以设置可接受的阈值,如果不满足这些阈值,作业就会失败。

我希望为我的 C++ 代码复制这个。这可能吗?

最佳答案

代码覆盖率与您使用的测试框架无关。

在 Linux 上使用 C++,您必须使用特殊标志编译软件以启用代码覆盖,例如对于 g++,您必须设置参数 --coverage(并且还建议禁用所有优化)。

当您随后运行测试程序时,您将获得大量包含覆盖率数据的文件。然后可以通过例如收集和评估这些。 lcov.
lcov 可以用结果创建 HTML 页面,但也会将覆盖率分析的总和打印到 stdout。因此,您必须构建一个脚本来运行 lcov、过滤输出并根据测量的百分比报告错误或失败。

顺便说一句,您可以为 lcov 设置限制以定义覆盖率何时足够,但这仅用于 HTML 输出中的背景颜色。

关于这些主题中的每一个,您都可以在 Stackoverflow 上找到多个条目,以及如何完成这些任务。

关于c++ - 我如何从终端的谷歌测试套件中获取 C++ 代码超量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47902627/

相关文章:

c# - 当构造函数有参数时使用 Moq 实现模拟对象

c# - 是否有一种方法或库会为字符串比较产生冗长且有用的失败断言结果?

unit-testing - 如何测试 Wireshark 解剖器?

ios - 为 iOS 应用程序 stub /模拟 Web 服务

c++ - OpenCV:在 CV_16UC1 垫子上画一个白色(!)圆圈

c++ - 更简洁的方式来写下面的语句

c++ - 为什么我的代码中没有调用移动构造函数?还有为什么不调用 dtor 只是为了销毁临时对象?

git - CI : One git repository fits it all? 或者:多个项目的 gitflow

github - 在 GitHub Actions 中保存作业失败时的缓存

c++ - 为什么显式模板实例化不会破坏 ODR?