我喜欢在我的 Linux 机器上使用 gcovr 来了解测试的内容和未测试的内容。我掉进了一个看不到解决方案的坑里。
我有如下所示的 C 代码(另存为main.c
)。代码变得非常简单 - 实际上重点只是#if 构造以及如何针对不同的编译设置进行覆盖分析。
/* Save as main.c */
#include <stdio.h>
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 上编译和进行覆盖测试
$ rm -f testprogram *.html *.gc??
$ gcc -o testprogram main.c \
-g --coverage -fprofile-arcs -ftest-coverage --coverage \
-DPRINTSTYLE=0
$ ./testprogram
$ gcovr -r . --html --html-details -o index.html
$ firefox index.main.c.html
这几乎是超级 - 但我想做的是结合测试结果-DPRINTSTYLE=0
(见上图)-DPRINTSTYLE=1
- 然后我逻辑上应该在生成的 index.main.c.html 中获得 100% 的覆盖率
我完全理解中间需要重新编译。
如何使用 ifdef 代码使用 gcovr 获得 100% 的覆盖率?