如何使用gcov计算与C程序相对应的测试用例的代码覆盖率



C程序由.C和.h文件组成。

当C程序编译并运行时,它要求命令行输入(程序继续要求输入,直到用户输入"bye"并单击回车(。

测试用例包括许多.in和.out格式的文件。

.in文件是命令行的输入,.out文件是程序的输出。

我有一个.sh文件,它运行.in格式文件并将输出与.out格式文件进行比较。我的测试用例(.in,.out文件(在一个名为"的文件夹中;测试";。

我发现在gcov中使用的参数不能使用.sh格式的文件。

我想知道如何计算我的测试用例的代码覆盖率,并找出哪些代码行没有被我的测试案例覆盖?

您可以简单地添加测试覆盖率:

  1. 在编译选项中,添加-fprofile-arcs -ftest-coverage。这样,生成的可执行程序每次被调用时都会生成统计信息(在.gcno/.gcda文件中(。

  2. 执行.sh测试文件

  3. 要求gcov生成统计文件:键入gcov -m *.c,它将生成包含覆盖率测试结果的.c.gcov文件。

例如,我们可以创建以下程序并对其进行测试。

#include <stdio.h>
int main(int argc) 
{
if (argc) {
printf("not zero");
} else {
printf("zero"); 
}
return 0;
}
gcov -m *.c
File 'foo.c'
Lines executed:80.00% of 5
Creating 'foo.c.gcov'

结果文件为:

-:    0:Source:foo.c
-:    0:Graph:foo.gcno
-:    0:Data:foo.gcda
-:    0:Runs:1
-:    0:Programs:1
-:    1:#include <stdio.h>
-:    2:
1:    3:int main(int argc) 
-:    4:{
1:    5:    if (argc) {
1:    6:        printf("not zero");
-:    7:    } else {
#####:    8:        printf("zero");
-:    9:    }
1:   10:    return 0;
-:   11:}

最新更新