使用gcc/g++的--coverage查看代码的覆盖测试(使用VSCode)
使用gcc/g++的--coverage查看代码的覆盖测试
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来查看代码的覆盖测试情况,对于测试来说很有用。
更多推荐

所有评论(0)