单元测试之 - gtest(构建、安装、demo,覆盖率测试)

一、简介

我们熟悉的单元测试框架有很多,比如 gtest, boost.test, catch等,今天以功能完备,文档丰富,比较常用的 gtest 为例子,包括构建、安装、demo, 覆盖率展示等。文章主要面向对单元测试了解不多的小白,更多单元测试内容自己百度吧,内容很多。

1、如下内容在个人的腾讯计算云上完成,linux ubuntu系统

 2、自行百度的意思是搜索,不是真的百度,能用google最好不要用百度,做开发的都懂。

二、gtest构建和安装

1、源码下载

github仓库地址: GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第1张图片

方法一

如果 git 工具已经安装和配置正确,可以直接用 git 拉取代码

git clone [email protected]:google/googletest.git

方法二

也可以在仓库直接下载源码包到本地解压,我下载的1.8.1版本

2、构建和安装 

用 cmake + make 构建和安装其实非常简单,具体可参考官方文档,顺便提一句,大家要习惯看原汁原味的英文官方文档。 

https://github.com/google/googletest/blob/main/googletest/README.md

mkdir build

cd buld

cmake ../

make 

sudo make install

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第2张图片

 单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第3张图片

 单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第4张图片

 可以看到我的 gtest 就安装成功了,库文件在 /usr/local/lib 下, 头文件在 /usr/local/include/gteest 和 /usr/local/include/gmock

三、覆盖率工具gcov / lcov

1、什么是 gcov / lcov

gcov是gnu工具集自带的工具,用来统计代码覆盖率,不过只有文本信息, lcov 工具可以理解成 gcov 工具的前端,根据 gcov 的数据生成可视化的报告,可以很直观的来看单元测试的代码覆盖率。更多信息请自行百度。

2、lcov 安装

源码下载和安装指南,请参考:

GitHub - zhaoyf22/lcov: LCOV

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第5张图片

查看帮助文档ok,说明安装好了

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第6张图片

 

四、demo构建和覆盖率测试

1、demo获取

可以从如下仓库获取一个参考 demo

​​​​​​GitHub - zhaoyf22/cmake-gtest-coverage-example: A sample C++ CMake project demonstrating google testing framework with mocks and coverage.

2、构建和测试

因为我们本地已经安装了 gtest,修改下demo 中的 CMakeLists.txt 内容,注释掉构建 gtest 的内容,把库文件路径和头文件路径加上去。

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第7张图片 然后用自带的脚本构建就好了,make_all.sh

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第8张图片单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第9张图片单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第10张图片

 构建成功,我们看到 coverage_report 下面已经生成了报告

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第11张图片

3、代码覆盖率查看

由于计算云无图形界面窗口,我们将报告拷贝到本地,用浏览器查看即可

单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第12张图片

 总体信息里面有行覆盖率,函数覆盖率,分支覆盖率,这三个数据具体什么以上自行百度,特别是分支覆盖率。单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第13张图片

 可以看到源文件中具体覆盖到那些行,那些没有被覆盖等。单元测试之 - gtest(构建、安装、demo,覆盖率测试)_第14张图片

 

你可能感兴趣的:(每月一篇,单元测试,单元测试,unit,testing)