gcc/g++在9.0版本后提供了一个编译链接选项–coverage选项,可用来查看代码的覆盖测试情况,即查看代码中哪些部分已经被测试了或者没有被测试,其简单描述如下,

This option is used to compile and link code instrumented for coverage analysis. The option is a synonym for -fprofile-arcs -ftest-coverage (when compiling) and -lgcov (when linking).

详细可查看这里

例如一个类里定义了几个方法,测试完后可以查看哪些方法被测过了,哪些方法没有被测试过。

本文基于VSCode来讲述如何操作,使用远程连接,远程sever是Ubuntu 21.04 (虚拟机),gcc版本是10.3.0


一 Remote SSH设置

请参考这篇文章


二 安装gcov扩展

远程连接好虚拟机后,在VSCode的扩展里搜索gcov,会出现Gcov Viewer,点击进去安装,
在这里插入图片描述
PS:这个扩展是有图标的,不知为啥我这里显示不出来…

注意这个扩展是安装在远程server上的,安装完毕后如下,
在这里插入图片描述
可以自行查看其描述内容。


三 测试

我们建立一个工程,如下,
在这里插入图片描述
MyClass.h如下,

#ifndef __MY_CLASS_H__
#define __MY_CLASS_H__

class MyClass
{
public:
    void func1(void);

    void func2(void);
    
    void func3(void);
};

#endif

MyClass.cpp如下,

#include <iostream>

#include "MyClass.h"


void MyClass::func1(void)
{
    std::cout << "This is func1()\n";
}

void MyClass::func2(void)
{
    std::cout << "This is func2()\n";
}

void MyClass::func3(void)
{
    std::cout << "This is func3()\n";
}

main.cpp如下,

#include "MyClass.h"


int main(void)
{
    MyClass obj;
    obj.func1();

    return 0;
}

可以看出MyClass类里定义了三个方法,但是main.cpp里只调用了一个方法func1,另外2个方法没有覆盖到。

CMakeLists.txt如下,注意不能开启优化选项,

cmake_minimum_required(VERSION 3.5)


project(demo)

add_compile_options(--coverage)

add_link_options(--coverage)


add_executable(main src/main.cpp src/MyClass.cpp)

然后我们cd到build目录,执行下面命令,

cmake .. && make

成功后执行main,

./main

此时在vscode里按Ctrl+shif+p调出命令选项,输入gcov,然后选择Gcov Viewer: Show,
在这里插入图片描述
此时再去查看代码,可以发现已经被测过的代码会被绿标,
在这里插入图片描述
如果想关闭绿标,可以选择Gcov Viewer: Hide来关闭,非常方便


四 总结

本文基于VSCode的扩展gcov viewer来查看代码的覆盖测试情况,对于测试来说很有用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐