gcov/lcov + googletest 创建一个人为的低分支覆盖率报告

gcov/lcov + googletest create an artificially low branch coverage report

首先,我很清楚throws/exceptions引起的“hidden branch”问题。这不是那个。

我观察到的是:

  1. 我的测试框架 (googletest) 有测试宏(例如 EXPECT_TRUE)。
  2. 我使用宏编写通过测试
  3. 测量分支覆盖率现在渐近线为 50%,因为我没有在通过和失败条件下评估 test.. .

考虑以下几点:

TEST (MyTests, ContrivedTest)
{
    EXPECT_TRUE(function_that_always_returns_true());
}

现在假设我在 function_that_always_returns_true() 中完美覆盖了每一行和每个分支,这个分支覆盖报告将渐近 ​​50%(因为 gcov 没有观察到第 3 行在失败条件下评估,故意)

关于这个问题,我唯一的想法是我可以用 LCOV_EXCL_BR_LINE 之类的东西排除求值宏,但这感觉既不符合人体工程学又很老套。

TEST (MyTests, ContrivedTest)
{
    bool my_value = function_that_always_returns_true();
    EXPECT_TRUE(my_value); //LCOV_EXCL_BR_LINE
}

这不可能是一个小众问题,我不得不相信人们通过 lcov/gcov 成功地使用了 googletest。人们如何解决这个限制?

找了很久之后,我意识到我要过滤掉的所有测试调用都是 EXPECT_* 模式。所以简单地添加:

lcov_excl_br_line=LCOV_EXCL_BR_LINE|EXPECT_*

我的 lcovrc 解决了我的问题