首先,我很清楚"隐藏分支";由抛出/异常引起的问题。事实并非如此。
我观察到的是:
- 我的测试框架(googletest(有测试宏(例如
EXPECT_TRUE
( - 我用宏编写通过测试
- 测量分支覆盖率现在是50%的渐近线,因为我没有评估测试在通过和失败的情况下
考虑以下内容:
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一起使用。人们会做些什么来绕过这个限制?
在查找太久之后,我意识到我想要过滤掉的所有测试调用都是模式EXPECT_*
。所以简单地添加:
lcov_excl_br_line=LCOV_EXCL_BR_LINE|EXPECT_*
到我的lcovrc
解决了我的问题