gtest是Google开发的一个开源单元测试框架,代码提供丰富的注释和实例,参考实际用例可以很快上手基本单元测试,丰富的代码注释能够让有兴趣的开发者深入了解gtest的代码结构并做部分针对性的二次开发。gtest主要针对c/c++提供了针对函数接口和类方法丰富测试方法,针对单元测试特有的数据或者代码反复编写的这种特性做了集成和优化,满足当前绝大部分对于单元测试的需求。其有如下特点:

  • 自动收集测试用例,无需开发者再次组织
  • 提供强大的断言集,支持包括布尔、整型、浮点型、字符串等。提供断言方法自定义扩展
  • 提供死亡测试功能
  • 使用参数化自动生成多个相似的测试用例
  • 可以将公共的用例初始化和清理工作放入测试夹具中,由gtest自动调用减少重复测试代码
  • 提供监听事件,能够对测试开始或者结束进行状态分析。

结合如上的特点,gtest涉及知识主要是断言、参数化、夹具、死亡测试、监听这么几个点。本章主要讲解gtest的编译和基本实例执行。

1. gtest的获取和编译

1.1 gtest获取

gtest在GitHub上是开源项目,可以直接clone或者下载软件包。

git clone https://gitee.com/mirrors/googletest.git

1.2 ubuntu18.04编译

cd googletest-main
mkdir build
cd build
cmake ..
make

编译以后的静态库在build/lib下面,共四个静态库文件。

1.3 简单实例

创建测试用例目录utest,里面包含了gtest的源码和编译结果库文件。在测试中建立include、lib两个目录分别用来存放gtest对外提供的头文件和编译出来的库文件。注意include和lib下面的gtest子目录是最终实际保存头文件或者库的最终内容。

book@100ask:~/utest$ tree
.
├── a.out
├── googletest-main
├── gtest.cpp
├── include
│   └── gtest
└── lib└── gtest

目录建立成功以后,通过如下命令将gtest中结果拷贝到需要编译的架构中:

cp gtest1110/build/lib/*.a lib/gtest/
cp -r gtest1110/googletest/include/gtest/ include/

建立测试文件gtest.cpp,代码内容如下

#include<gtest/gtest.h>
using namespace testing;
int add(int a,int b){return a+b;
}
TEST(testCase,test0){EXPECT_EQ(add(2, 3), 5); // 正确EXPECT_EQ(add(2, 3), 4); // 错误
}
int main(int argc,char **argv){InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();
}

通过如下命令将代码和库文件编译成一个可执行文件进行测试

g++ gtest.cpp -L lib/gtest -I include -lgtest -pthread

测试执行结果如下:

book@100ask:~/utest$ ./a.out
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from testCase
[ RUN      ] testCase.test0
gtest.cpp:9: Failure
Expected equality of these values:add(2, 3)Which is: 54
[  FAILED  ] testCase.test0 (0 ms)
[----------] 1 test from testCase (0 ms total)[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] testCase.test01 FAILED TEST

2. Gtest简单说明

测试用例编写需要包含gtest.h头文件,文件中包含了核心的对外测试接口。

2.1 基本测试单元

gtest代码中包含了一些简单的测试用例,比方说sample_unitest.c中如下这一段

// Tests factorial of positive numbers.
TEST(FactorialTest, Positive) {EXPECT_EQ(1, Factorial(1));EXPECT_EQ(2, Factorial(2));EXPECT_EQ(6, Factorial(3));EXPECT_EQ(40320, Factorial(8));
}

这一段给定了一个case基本的结构, TEST宏两个参数官方解释为:[TestCaseName,TestName],而我对这两个参数的定义是:[TestSuiteName,TestCaseName],在下一篇我们再来看为什么这样定义。

对检查点的检查,我们上面使用到了EXPECT_EQ这个宏,这个宏用来比较两个数字是否相等。Google还包装了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的区别是:

  • EXPECT_*  失败时,案例继续往下执行。
  • ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。

另外,测试一个case中测试的前后顺序是有讲究的,前面的顺序要首先满足然后依次推进。也就是前面一个测试用例是后面一个测试用例成立的必要不充分条件。

2.2 测试运行

测试运行主要包含两个核心内容,main函数中开始部分使用中可以根据自己情况编写部分定制的初始化代码或者过滤代码。之后调用gtest初始化函数,然后调用执行接口即可完成整个执行过程。执行结束以后可能需要用户自己编写部分代码针对自己特定的需求完成部分定制的结果解析。这里面最基本的两个单元如下:

  • “testing::InitGoogleTest(&argc, argv);” :gtest的测试案例允许接收一系列的命令行参数,因此,我们将命令行参数传递给gtest,进行一些初始化操作。gtest的命令行参数非常丰富,在后面我们也会详细了解到。
  • “RUN_ALL_TESTS()” :运行所有测试案例。

gtest初识 - googletest(一)相关推荐

  1. GoogleTest单元测试学习

    一.GTest简介 GoogleTest是一个单元测试的框架. 单元测试: 单元测试在函数在整个工程运行起来之前,对该函数进行测试,来判断当前函数能否达到预期的效果. 使用GoogleTest: 1. ...

  2. 第一个GoogleTest(gtest)项目实验日记

    第一个GoogleTest(gtest)项目实验日记 目录 零.前言... 2 一.创建一个带main函数的项目... 3 二.创建GoogleTest环境... 6 1.头文件... 6 2.编写简 ...

  3. 白盒测试之初识gtest工具

    因为公司最近对软件产品质量提高了要求,之前项目组中黑盒测试方法就越来越无法满足公司的要求.虽然作为研发,但是也要求对白盒测试有一个系统的了解(毕竟之前没有系统的接触过白盒测试). 单元测试工具有很多种 ...

  4. 玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

    一.前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例. 二.下载 如果不记得网址, 直接在google里搜gtest,第一个 ...

  5. Linux ubuntu gtest googletest download compile apply TEST TEST_F TEST_P

    1. 下载googletest: $ cd /home/maymay/ex/gtest/ $ wget https://github.com/google/googletest/archive/ref ...

  6. googletest (gtest)的使用方法

    最近在项目中, 碰到一些问题, 发现无法从集成测试来覆盖, 比较合适的办法就是通过单元测试, 就顺便研究了一下Google test的使用方法. Google test是一种比较方便的C++测试框架, ...

  7. GoogleTest从入门到入门,小白都能看懂的gtest详细教程

    单元测试 项目管理和技术管理中做单元测试,衡量一个软件是否正常的标准,良好的单元测试以及足够多的覆盖率,至少保证关键功能,关键业务的覆盖率接近100%. gtest是谷歌公司发布的一个跨平台(Linu ...

  8. 项目gtest测试框架 - GoogleTest(十)

    精简版本的C++单元测试框架 ,通过编写这个简单的测试框架,将有助于我们理解gtest. 1. 目录 类型 文件 说明 文件 ./CMakeLists.txt 整体项目工程文件 目录 ./debian ...

  9. Google Test(GTest)使用方法和源码解析——预处理技术分析和应用

    预处理 在<Google Test(GTest)使用方法和源码解析--概况>最后一部分,我们介绍了GTest的预处理特性.现在我们就详细介绍该特性的使用和相关源码.(转载请指明出于brea ...

最新文章

  1. shell变量,环境变量配置文件,管道符
  2. 2015美国数学建模a代码c语言,1985~2015美国大学生数学建模竞赛题目集锦.docx
  3. dnslog盲注原理
  4. 2018华工计算机应用基础作业,计算机应用基础平时作业2019
  5. CSS Word的文档结构视图设计
  6. 服务器安装系统难吗,服务器安装系统难吗
  7. 兄弟打印机内存已满清零方法_打印机是如何清零的?兄弟打印机清零方法
  8. 太阳代理ip_IP直通车 | 冬季之始,你知多少
  9. 教你流程化梳理外贸工作(附18个全流程邮件模板分享)
  10. oracle序列自增
  11. love2d角度,方向以及旋转
  12. java获得当月法定工作日_java获取当月的工作日
  13. 倚杖听江声夜雨剪春韭
  14. [转]信息安全相关理论题(三)
  15. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第十集
  16. 计算机毕设导师搞事情,研究生搞科研时,应注意避开的10个错误
  17. 不属于python特点的是_Python程序设计课后习题答案-第一单元
  18. ListView的长按事件和点击事件冲突的解决办法
  19. 某软件平台定制开发项目技术标书
  20. 智慧管廊智能化运维管理平台详情

热门文章

  1. Android 打开手机QQ,实现类似于客服功能
  2. 如何使用odoo的compute方法,自动计算odoo字段
  3. GPS术语 -- 词汇与概念解释(四)
  4. FPGA综合实验 05 - | VGA彩条信号显示控制电路设计
  5. 【JiyaChieng】(贰)CoreDump —— 崩溃前的自拍
  6. 【趣味】0基础快速掌握区块链服务关键概念
  7. 网络中的四元组、五元组、七元组
  8. python大作业80个_大黄蜂35个彩蛋解析!!你必看的80年代大风暴
  9. DIY便携式显示器板卡推介与定制
  10. 直播app与微信qq同时占用麦克风,或者播放音乐时来电,解决麦克风冲突