三、gtest系列之事件机制 “事件” 本质是框架给你提供了一个机会, 让你能在这样的几个机会来执行你自己定制的代码, 来给测试用例准备/清理数据。...2、TestCase事件 是挂在每个案例执行前后的,需要实现的是SetUp方法和TearDown方法。...SetUp方法在每个TestCase之前执行;TearDown方法在每个TestCase之后执行。...SetUp方法在所有案例执行前执行;TearDown方法在所有案例执行后执行。...下面我们再来做一个测试实例,测试当程序出问题时候死亡测试如何使用? ?
编译 lib 到 github 拉取代码或者下载某个版本的 zip 包到本地目录,参考 gtest 中的 README.md 如何编译库和编译自己的代码,下面简单介绍下编译方法 手动编译 $ g++ -...Fixture 多个用例需要使用相同的数据,每次都在用例中准备显得很重复麻烦,这时候,可以使用 Fixture 来构建用例,使多个用例共用相同的数据对象配置。...,但是我们可以在运行时指定他的行为,如何被使用,使用多少次、参数,使用时返回什么等。...编译 编译说明 gmock 编译需要依赖 gtest, 准备好 gtest 和 gmock (同一个版本)后,手动编译的方法如下: 设置好 gtest 和 gmock 的工程路径,或者在下面命令中直接替换源路径...使用 cmake编译库,进入 gmock 目录(此处 gtest 已经准备并且与 gmock 同级目录) $ cd ./googlemock/; mkdir build $ cd .
GTest的断言 1、布尔值检查 ? 2、数值型数据检查 ? 3、字符串比较 ? 4、异常检查 ? 5、浮点型检查 ? 对相近的两个数比较: ?...SetUp()方法在所有案例执行前执行 2....TearDown()方法在所有案例执行后执行 还需要告诉gtest添加这个全局事件,我们需要在main函数中通过testing::AddGlobalTestEnvironment方法将事件挂进来,也就是说...SetUp()方法在每个TestCase之前执行 2....TearDown()方法在每个TestCase之后执行 以下案例解决说明上述三个事件的使用 #includegtest/gtest.h> #include #include<iostream
---- 三、gtest系列之事件机制 “事件” 本质是框架给你提供了一个机会, 让你能在这样的几个机会来执行你自己定制的代码, 来给测试用例准备/清理数据。...2、TestCase事件 是挂在每个案例执行前后的,需要实现的是SetUp方法和TearDown方法。...SetUp方法在每个TestCase之前执行;TearDown方法在每个TestCase之后执行。...SetUp方法在所有案例执行前执行;TearDown方法在所有案例执行后执行。...下面我们再来做一个测试实例,测试当程序出问题时候死亡测试如何使用?
【复用性高】 被测试模块的复用性高,搭建的测试框架才是有价值有收益的,毕竟投入成本很高;其次在测试中还可以抽象出可重复使用的公共方法,测试代码的复用性也高。...++ - CPPUnit/GTest Python - pyUnit/py.test/Nose OC - OCUnit/OCMock 【基本执行过程】 一般测试用例执行过程分为四个步骤: SetUp:准备阶段...每个测试用例执行前的准备阶段,部署测试环境比如对象的初始化等。...,只有当你知道框架内部是如何运行的,不仅知其然,还知其所以然,才能使用的更加得心应手。..._是类TestCase中的私有数据成员,它也是一个vector向量。
模拟初学者指南 (Mocking for Dummies)- 教你如何创建模拟对象并在测试中使用它们。 模拟秘籍 (Mocking Cookbook) - 包含常见模拟用例的技巧和方法。...你可以通过对其行为进行断言来测试一个类或函数。当一个断言失败时,gtest 会打印断言的源文件和行号位置,以及一个失败消息。你还可以提供一个自定义的失败消息,它将附加到 gtest 的消息中。...1.3 测试夹具:为多个测试使用相同的数据配置 Test Fixture(测试夹具)是指在测试运行前后,需要被执行的代码片段。...在类体开始处使用 protected:,因为我们希望从子类访问夹具成员。 在类中声明你需要使用的任何对象。 如果需要,编写一个默认构造函数或 SetUp() 函数,为每个测试准备对象。...一个常见的错误是将 SetUp() 拼写为小写的 Setup() - 在 C++11 中使用 override 确保拼写正确。
GTest是很多开源工程的测试框架。虽然介绍它的博文非常多,但是我觉得可以深入到源码层来解析它的实现原理以及使用方法。...我们使用者只要照着这样的样板去编写测试用例,是非常方便的,这也将大大降低我们使用GTest库的门槛。 TEST宏是一个很重要的宏,它构成一个测试特例。...我们测试时,往往要构造复杂的数据。如果我们在每个测试特例中都要构造一遍数据,将是非常繁琐和不美观的。GTest提供了一种提前构建数据的方式。...提供的基类testing::Test,并重载SetUp方法。...这样我们每次执行ListTest的一个测试特例时,SetUp方法都会执行一次,从而将数据准备完毕。这样我们只要在一个类中构建好数据就行了。
如果没有,请阅读下文以了解如何安装它们。 如果你使用的是Mac系统,下文假设你的系统上已经安装了brew包管理器。...做过多讲解,读者可以访问其官网或者在网络上搜寻其使用方法。...为了保证每条case是独立的,我们可以在每条case的执行前后分别完成准备工作和清理工作,例如,准备工作是向队列中添加三个数据,而清理工作是将队列置空。...Mac系统 brew install lcov Ubuntu系统 sudo apt install lcov 使用 对于lcov的使用方法可以通过下面这条命令查询: lcov --help 通过输出我们可以看到...持续集成 对于演示项目的覆盖率报告是通过手动执行脚本文件生成的。 而在实际的项目中,可能同时有很多人在开发同一个项目,每一天项目中都会有很多次的代码提交。
今天笔者在这里要和大家聊聊的就是目前我司主力在使用的Gtest,以及配套的 Gmock,通过两者的配合使用,相信能够搞定绝大多数的测试场景了。...用 CMake 生成 Makefile之后直接 make 编译 最后进行安装 2.Gtest 的使用 Gtest 十分容易上手,通过其中的定义的宏就可以轻松实现要进行单元测试。...这样的场景就适合使用 TEST_F的宏来进行测试。TEST_F适用于多种测试场景需要相同数据配置的情况,利用了 C++继承类来实现对父类方法的测试。...同时要实现对应的 SetUp与TearDown方法,SetUp方式执行资源的初始化操作,而TearDown则负责资源的释放。...至于如何使用 Mock Object 呢?这里要引出本章的主角 Gmock 了,接下来笔者将编写一个简要的 Mock对象并进行单元测试,来展示一下 GMock 的用法。
\vcpkg.exe install gtest 相关特性 一 .断言 一般的要测试一个方法(函数)是否是正常执行的,可以提供一些输入数据。...在调用这个方法(函数)后得到输出数据,然后检查输出的数据是否与我们期望的结果是一致的。若一致则说明这个方法的逻辑是正确的,否则就有问题。...在构造函数或者继承于::testing::Test类中的SetUp方法中可以实现我们需要构造的数据。...一个TEST_F不会影响另一个TEST_F所使用的数据,多个测试场景需要相同数据配置的情况用 TEST_F。 TEST_P宏 在设计测试案例时,经常需要考虑给被测函数传入不同的值的情况。...1.全局事件 要实现全局事件,必须写一个类继承testing::Environment类,实现里面的SetUp和TearDown方法。 1. SetUp()方法在所有案例执行前执行。 2.
引言 google test是目前C++主流的单元测试框架,本文介绍如何在工程引入gtest和gmock,并提供入门参考示例。...再来说说为什么引入mock: 解决环境依赖的问题(网络、数据库等) 更早的实现接口逻辑(在后端服务未准备好之前),减少等待 通过模拟真实对象更好的驱动进行代码设计 当然Why层面可以做更多的深入思考,这里主要是抛砖引玉...How:如何使用gtest & gmock?...基本概念 模拟类(Mock Class):一个类的模拟实现,使用宏定义来替代实际方法的实现。 期望(Expectations):定义模拟对象的预期行为,比如函数调用的次数和返回值。...写在最后 本文通过黄金思维圈来思考引入单元测试带来的价值,并基于C++工程来接入gtest和gmock来完成基础单测和mock场景的使用。
预处理 在《Google Test(GTest)使用方法和源码解析——概况》最后一部分,我们介绍了GTest的预处理特性。现在我们就详细介绍该特性的使用和相关源码。...在类内部使用public或者protected描述其成员,为了保证实际执行的测试子类可以使用其成员变量(这个我们后面会分析下) 在构造函数或者继承于::testing::Test类中的SetUp方法中,...)使用方法和源码解析——自动调度机制分析》中分析的TEST宏的实现 #define GTEST_TEST(test_case_name, test_name)\ GTEST_TEST_(test_case_name...在Test类的Run方法中,除了调用了子类定义的虚方法,还执行了SetUp和TearDown方法 internal::HandleExceptionsInMethodIfSupported(this...如果我们要使用该特性,则要声明一个继承于::testing::Environment的类,并实现其SetUp/TearDown方法。
test.cpp g++ -c sample.cpp g++ -c test.cpp g++ test.o sample.o -lgtest -o test -lpthread ###Assertions: 使用...###Test Fixtures: 继承于testing::Test,SetUp函数用来准备需要的数据,如果需要释放数据则在TearDown函数中,TEST_F中的第一个参数为类名,第二个为test的名字...flag的状态 2 创建第一个test fixture 3 SetUp初始化 4 进行测试 5 TearDown销毁 6 删除fixture 7 restore gtest flag的状态...方法,所有测试结束之后调用环境变量的TearDown方法。...--gtest_also_run_disabled_tests:执行被禁用的测试 --gtest_repeat=num:重复所有测试方法num次 --gtest_shuffle:洗牌测试 --gtest_output
与 gtest_maind.lib/gtest_main.lib的区别?...testBody… } 注意:这里的TestCaseName,即TestSuiteName 而 TestName,即TestCaseName 2.4TestFixtures 创建测试集:多个测试用例,使用相同的配置和数据...创建方法: 1....使用protected 启动它的主体,因为我们需要从子类访问fixture的成员 2.在类中,声明需要使用的对象 3.如有必要,写一个默认的构造函数 或 SetUp() 方法 用来 为每个测试准备对象...注意:SetUp()中的U为大写 4.如有必要,写一个析构函数 或 TearDown()方法 用来 释放在SetUp()中分配的任何资源 5.如有需要,为要共享的测试定义子例程。
下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。 本文包括以下几部分:1、获取并编译googletest(以下简称为gtest);2、如何编写单元测试用例;3、如何执行单元测试。...2、如何编写单元测试用例 以一个例子来说。我写了一个开地址的哈希表,它有del/get/add三个主要方法需要测试。...所以,gtest提供的TEST方式我不会用,因为多个TEST不能共享同一份数据,而且还有初始化哈希表对象的过程呢。所以我用TEST_F方式。...因为太简单,所以不需要使用google mock模拟一些依赖。后续我再写结合google mock来写一些复杂的gtest单元测试。 下面来简单说下gtest的工作流程。...以上并没有深入细节,只是大致帮助大家理解,我们写的几个简单的gtest宏,和单元测试用例,到底是如何被执行的。接下来,我会通过gmock来深入的看看google单元测试的玩法。
1断言 一般的,要测试一个方法(函数)是否是正常执行的,可以提供一些输入数据,在调用这个方法(函数)后,得到输出数据,然后检查输出的数据是否与我们期望的结果是一致的,若一致,则说明这个方法的逻辑是正确的...当断言失败时Gtest将会打印出assertion时的源文件和出错行的位置,以及附加的失败信息。这些输出的附加信息用户可以直接通过“SetUp方法中,可以实现我们需要构造的数据。...3.1全局事件 要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。 1. SetUp()方法在所有案例执行前执行 2....不过需要实现的是SetUp方法和TearDown方法: 1.
新博客链接 gtest 提供了一套优秀的 C++ 单元测试解决方案,简单易用,功能完善,非常适合在项目中使用以保证代码质量。...这里建议安装 gtest 1.7 release 版本(该安装方法对 1.8 不适用): ➜ ~ wget https://github.com/google/googletest/archive/release...sample1 运行结果如下: 如果出错的话会提醒我们哪个用例错误,哪个检查点不通过,以及对应代码位置,非常棒。 sample3 sample3 用来演示一个测试夹具的使用。...前面我们每个测试用例每个测试集间都是完全独立的,使用的数据也互不干扰。但如果我们使用的测试集需要使用一些相似的数据呢?或者有些相似的检查方法?这时就需要用到测试夹具了。...其他 gtest 还提供了其他更灵活也更复杂的测试方法,可以参考 sample5 之后的例子。这里限于篇幅就不介绍了,而且就我而言即使在生产环境也不需要用到这么复杂的测试方法。
在《Google Test(GTest)使用方法和源码解析——结果统计机制分析》文中,我么分析了GTest如何对测试结果进行统计的。...它提供了一个单例方法返回自己的一个对象,然后各处代码都在调用这个单例的方法。所以说它是GTest框架中非常重要的衔接环。...在GTest测试框架中,它提出了一个Listener的概念,以供开发者监听执行过程。GTest框架就是使用Listener机制实现了结果输出。...然后我们再来看框架中是如何“触发”这些事件的。 ...GTest判断类宏进行数据判断。
的主要使用方法和注意事项,并设计了若干可编译的精简示例,给出了运行效果图。...gtest中常用的所有结构体、类、函数、常量等,都通过命名空间testing访问,不过gtest已经把最简单常用的单元测试功能包装成了一些带参数宏,因此在简单的测试中常常可以忽略命名空间的存在。...有意思的是,测试代码不需要注册测试用例,也不需要定义 main函数,这是gtest通过后一个静态库自动完成的,它的实现代码如下: // gtest-main.cc...(可选)建立环境:使用默认构造函数,或定义一个虚成员函数 virtual void SetUp()。 3....在 C中,可以实现诸如 SetUp、 TearDown等方法。特别地,测试参数由 TestWithParam实现的 GetParam()方法依次返回。 3.
多个测试场景需要相同数据配置的情况,用TEST_F。 gtest中,断言的宏可以分为两类,一类是ASSERT系列,一类是EXPECT系列。...全局事件:要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。...SetUp方法在所有案例执行前执行;TearDown方法在所有案例执行后执行。...TestCase事件:是挂在每个案例执行前后的,需要实现的是SetUp方法和TearDown方法。...(1)、SetUp方法在每个TestCase之前执行; (2)、TearDown方法在每个TestCase之后执行。