开发者社区> 问答> 正文

如何使用带有ifdef代码的gcovr获得100%的覆盖率?

我喜欢在Linux机器上使用gcovr来了解已测试的内容和未测试的内容。我掉进了一个坑,那里看不到解决方案。

我有如下所示的C代码(另存为main.c)。该代码非常简单-实际上,重点仅在于#if构造以及如何针对不同的编译设置进行覆盖率分析。

/* Save as main.c */

void fct(int a)
{
// Define PRINTSTYLE to 0 or 1 when compiling
#if PRINTSTYLE==0
    if (a<0) {
        printf("%i is negative\n", a);
    } else {
        printf("%i is ... sorta not negative\n", a);
    }
#else
    if (a<0) {
        printf("%i<0\n", a);
    } else {
        printf("%i>=0\n", a);
    }
#endif
}


int main(void)
{
    fct(1);
    fct(-1);
    return 0;
}

我可以使用例如在Linux上进行编译和覆盖测试

展开
收起
祖安文状元 2020-01-08 15:19:53 613 0
1 条回答
写回答
取消 提交回答
  • 这是可行的-但需要gcovr 4.2(或更高版本),如https://gcovr.com/en/stable/guide.html#combining-tracefiles中所示

    首先安装或升级gcovr,例如

    pip install -U gcovr
    
    

    然后确保〜/ .local / bin /在$ PATH中。

    接下来,对每个配置运行一次gcovr,并生成JSON报告:

    gcc -o testprogram main.c -g --coverage -DPRINTSTYLE=0
    ./testprogram
    gcovr -r . --json run-1.json
    
    gcc -o testprogram main.c -g --coverage -DPRINTSTYLE=1
    ./testprogram
    gcovr -r . --json run-2.json
    
    

    最后,使用-a /-add-tracefile模式合并JSON报告并生成所需的报告:

    2020-01-08 15:20:13
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
前端自动化测试 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载
不止代码 立即下载