gtest 单元测试

  • gtest 简介
  • gtest 优点
  • 安装 gtest
  • 测试 demo
  • 总结

gtest 简介

gtest是Google的一套用于编写C++测试的框架,可以运行在很多平台上(包括Linux、Mac OS X、Windows、Cygwin等等)。基于xUnit架构。支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。

gtest 优点

好的测试应该有下面的这些特点,我们看看GTest是如何满足要求的。

  1. 测试应该是独立的、可重复的。一个测试的结果不应该作为另一个测试的前提。GTest中每个测试运行在独立的对象中。如果某个测试失败了,可以单独地调试它。
  2. 测试应该是有清晰的结构的。GTest的测试有很好的组织结构,易于维护。
  3. 测试应该是可移植和可复用的。有很多代码是不依赖平台的,因此它们的测试也需要不依赖于平台。GTest可以在多种操作系统、多种编译器下工作,有很好的可移植性。
  4. 测试失败时,应该给出尽可能详尽的信息。GTest在遇到失败时并不停止接下来的测试,而且还可以选择使用非终止的失败来继续执行当前的测试。这样一次可以测试尽可能多的问题。
  5. 测试框架应该避免让开发者维护测试框架相关的东西。GTest可以自动识别定义的全部测试,你不需要一一列举它们。
  6. 测试应该够快。GTest在满足测试独立的前提下,允许你复用共享数据,它们只需创建一次。
  7. GTest采用的是xUnit架构,你会发现和JUnit、PyUnit很类似,所以上手非常快。

安装 gtest

2.搭建测试框架
gtest下载地址: https://github.com/google/googletest
下载方法是:git clone https://github.com/google/googletest.git
安装方法是:
$ cd googletest
注意:如果在make 过程中报错,可在CMakeLists.txt 中增加如下行,再执行下面的命令: SET(CMAKE_CXX_FLAGS “-std=c++11”)
$ cmake .
$ make
然后在lib目录下会生成:libgmock.a libgmock_main.a libgtest.a libgtest_main.a
最后我们再sudo make install。

测试 demo

待测试的代码文件:
sample1.cc
写得比较简单: 一个函数是 n 的阶乘计算,另外一个是判断是否为素数

#include "sample1.h"// Returns n! (the factorial of n).  For negative n, n! is defined to be 1.
int Factorial(int n) {int result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;
}// Returns true iff n is a prime number.
bool IsPrime(int n) {// Trivial case 1: small numbersif (n <= 1) return false;// Trivial case 2: even numbersif (n % 2 == 0) return n == 2;// Now, we have that n is odd and n >= 3.// Try to divide n by every odd number i, starting from 3for (int i = 3; ; i += 2) {// We only have to try i up to the square root of nif (i > n/i) break;// Now, we have i <= n/i < n.// If n is divisible by i, n is not prime.if (n % i == 0) return false;}// n has no integer factor in the range (1, n), and thus is prime.return true;
}

测试代码头文件


#ifndef GTEST_SAMPLES_SAMPLE1_H_
#define GTEST_SAMPLES_SAMPLE1_H_// Returns n! (the factorial of n).  For negative n, n! is defined to be 1.
int Factorial(int n);// Returns true iff n is a prime number.
bool IsPrime(int n);#endif

创建测试文件,其中使用的规则 和 gtest 库相关 sample_unittest.cc

#include <limits.h>
#include "sample1.h"
#include "gtest/gtest.h"
//加上命名空间 避免和 gtest 里面的变量 命名冲突
namespace {//TEST 是标号,gtest 识别,标号后面 (待测试的函数名称,以及一个标识符),命名没有特别要求,但是建议顾名思义,第一个是你要测试的函数名,第二个是参数是正还是负,这是待会测试打印的,便于查看的
TEST(FactorialTest, Negative) {// This test is named "Negative", and belongs to the "FactorialTest"// test case.EXPECT_EQ(1, Factorial(-5));//这里就是 将 -5 传到 Factorial 函数中去,看是不是预期等于1EXPECT_EQ(1, Factorial(-1));//同理 传入 -1 预期是否为1EXPECT_GT(Factorial(-10), 0);    //GT 大于等原因的意思,是否是大于0
}TEST(FactorialTest, Zero) {EXPECT_EQ(1, Factorial(0));
}
//与上面同理,这种 传值,大小的分类是便于我们自己查看,也可以一锅炖,都在一个 TEST 里面测试。但是这不方便我们查看。
TEST(FactorialTest, Positive) {EXPECT_EQ(1, Factorial(1));EXPECT_EQ(2, Factorial(2));EXPECT_EQ(6, Factorial(3));EXPECT_EQ(40320, Factorial(8));
}// Tests IsPrime()
TEST(IsPrimeTest, Negative) {EXPECT_FALSE(IsPrime(-1));EXPECT_FALSE(IsPrime(-2));EXPECT_FALSE(IsPrime(INT_MIN));
}TEST(IsPrimeTest, Trivial) {EXPECT_FALSE(IsPrime(0));EXPECT_FALSE(IsPrime(1));EXPECT_TRUE(IsPrime(2));EXPECT_TRUE(IsPrime(3));
}TEST(IsPrimeTest, Positive) {EXPECT_FALSE(IsPrime(4));EXPECT_TRUE(IsPrime(5));EXPECT_FALSE(IsPrime(6));EXPECT_TRUE(IsPrime(23));
}
}  // namespace

编译上述 三个文件 需要加上 gtest 库,线程库
g++ sample1.cc sample1_unittest.cc -lgtest -std=c++11 -lgtest_main -lpthread -o test1

测试效果
执行 ./tese1


如果我们故意 将
sample1.cc
中 n <= 1 ,改为 return false‘
立马定位到我们的错误

总结

上述介绍了 gtest 两个案例,一是 n 的阶乘,另一个是 判断是否是素数.gtest 功能强大,在实际项目开发中必不可少。

gtest 单元测试工具的基本使用相关推荐

  1. 温故而知新:gtest单元测试工具和lcov覆盖率统计工具的结合使用

    一.简介   之所以叫温故而知新,是因为将这两个工具结合起来作为单元测试工具的想法在上一个项目中应用了,好像还没有人将这两种工具结合使用,或者没有写成博客供大家参考,现在重新温习下将想法写下来. gt ...

  2. c++单元测试工具之——gtest

    gtest是谷歌为C++开发的单元测试框架,该框架基于xUnit架构.gtest提供了较丰富的测试特性,且其命令行方式输出界面友好美观,是C++单元测试工具的较佳选择. 1 gtest环境部署 先从这 ...

  3. 【软件测试】2021年软件测试领域常用工具总结(1)-抓包工具与单元测试工具篇

    前言 大家好,我是洋子,作为一名测试开发/软件测试工程师, 在进行软件测试的过程中,会用到测试工具去辅助测试,以提高测试工作的效率.今天就给大家介绍一下2021年软件测试领域当中的最流行,最实用的工具 ...

  4. 开源单元测试工具汇总

    开源单元测试工具/框架汇总 作为开源软件的爱好者,了解了单元测试这概念后,自然忍不住去找找有什么开源单元测试工具. 下面列出了30款1,不分先后顺序. 1. NoSQL的单元测试工具 NoSQLUni ...

  5. Openstack_单元测试工具 tox

    目录 目录 扩展阅读 Openstack 的单元测试工具 单元测试工具使用流程 tox toxini 参考文章 扩展阅读 Python Mock的入门 Openstack 的单元测试工具 unitte ...

  6. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  7. python 单元测试 工具_Django单元测试工具test client使用详解

    The test client test client是一个python类,来模拟一个简单的"哑"浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情 ...

  8. SAP UI5 初学者教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  9. SAP UI5 应用开发教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍

    Jerry 在之前做 SAP UI5 标准开发和现在使用 Angular 开发 SAP Spartacus 应用时,我们团队的开发规范就是,每增添一个新的前端 feature,必须要用一个新增的单元测 ...

  10. 常见单元测试工具介绍

    1.       C/C++语言开发的首选利器- C++Test 以前在windows平台下的开发,使用的框架主要是MFC,以及console工程(基于win32SDK),属于纯C/C++开发的范畴. ...

最新文章

  1. 跟踪workflow instance 状态
  2. 计算机基础知识自考真题,自考《计算机应用基础》基础试题
  3. ASP导出EXCEL乱码?试试这个
  4. 每周分享五个 PyCharm 使用技巧(一)
  5. SAP CRM HANA report里 默认filter 的工作机制分析
  6. rvm RuvyGem Cocoapods brew
  7. vscode-textlive-paper学习记录
  8. Linux Shell变量
  9. ES常用DSL语句(kibana常用语句)
  10. Python 练习题6-13
  11. Mysql数据库规范(阿里巴巴嵩山版java开发手册)
  12. 2021-11-26 pyautogui 配合雷电模拟器实现手机APP签到答题自动化
  13. STM32F103RB 实作笔记(三)- LED 7 节显示(正点原子 STM32F103 nano开发板)程式解析(上)
  14. 案例 | 苏州农村商业银行金融云平台支撑互联网创新业务发展
  15. HOME: First Word —— 字符串分割、正则表达式
  16. 如何使用outlook配置qq邮箱
  17. 解决ActiveMQ服务停掉后无限重连问题
  18. DOTA2无法找到有效的direct 3D
  19. 大仗的打法——推荐《智能商业》曾鸣的战略格局
  20. 2018年中国数字经济发展报告:农村数字消费增速超一二线城市

热门文章

  1. java read dxf xdata_dxf结构解析及读取坐标 | 学步园
  2. 如何设计一个超级牛逼的 Feed 流系统
  3. android 抽屉新热榜 splash,【IOS】模仿quot;抽屉新热榜quot;动态启动页YFSplashScreen,iosyfsplashscreen...
  4. pig的基本语法以及高级语法
  5. 盘点:54款真正耐玩的独立游戏
  6. 一个简单的静态网页制作(html+css)
  7. 【职场加油站】给职场新人的几条忠告
  8. 若依代码生成使用教程
  9. 每月一书(202104):《浪潮之巅》
  10. 初探可视化新秀PyG2Plot