gtest使用例子

最近使用gtest进行单元测试,采用打桩的形式。关于gtest的详细说明就不多说了,网上的资料一大堆。主要讲解使用时的参数如何配置以及遇到的问题。下面的例子模拟是加、减、乘、除四则运算,前提是不知道加、减、乘、除四则运算是如何实现的。

编译命令自己根据实际情况进行搭建

#include <iostream>
#include <vector>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include <string>

using namespace testing;
using namespace std;
//using ::testing::Return;
//using ::testing::ByRef;

class Operator   //要测试的接口分别是add()   sub() 
{
public:
    virtual int add(int x, int y) = 0;//加法
    virtual int sub(int x, int y) = 0;  //减法
    virtual int multi(int x, int y) = 0; //乘法
    virtual int divide(int x, int y) = 0; //除法
};

 

class MockOperator : public Operator {
public:
    MOCK_METHOD2(add, int(int x, int y));   //2代表add()有2个参数

int Operation::Add(Operator *op, int a, int b) {
    return op->add(a, b);
}

int Operation::Sub(Operator *op, int a, int b) {
    return op->sub(a, b);
}

int Operation::Multi(Operator *op, int a, int b) {
    return op->multi(a, b);
}

int Operation::Divide(Operator *op, int a, int b) {
    return op->divide(a, b);
}

TEST(OperatorTest, add) {
    MockOperator mock;

    int t = 13;

    EXPECT_CALL(mock, add(6, 7)).WillRepeatedly(Return(t));

    Operation op;
    EXPECT_EQ(13, op.Add(&mock, 6, 7));  //13 与 Add的结果进行比较
}

TEST(OperatorTest, sub) {
    MockOperator mock;

    int t = -1;

    EXPECT_CALL(mock, sub(6, 7)).WillRepeatedly(Return(t));  //设定返回值是t

    Operation op;
    EXPECT_EQ(-1, op.Sub(&mock, 6, 7));  //-1 与 Sub的结果进行比较
}

TEST(OperatorTest, multi) {
    MockOperator mockoperator;

    int t = 18;

    EXPECT_CALL(mockoperator, multi(2, 9)).WillRepeatedly(Return(t)); //设定返回值为t

    Operation op;
    EXPECT_EQ(18, op.Multi(&mockoperator, 2, 9));  //18 与 Multi的结果进行比较
}

TEST(OperatorTest, divide) {
    MockOperator mock;

    int t = 3;

    EXPECT_CALL(mock, divide(15, 5)).WillRepeatedly(Return(t)); //设定返回值为t

    Operation op;
    EXPECT_EQ(3, op.Divide(&mock, 15, 5));  //3 与 Divide()的结果进行比较
}

int main(int argc, char **argv) {
    std::cout << "start gtest" << endl;
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
 

结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏开发中的数学和物理算法(7):角度 vs 弧度

我们通常使用的笛卡尔坐标系统&#xff0c;角点通常在(0,0),即原点。初始边在x轴正半轴&#xff0c;终边与初始边成夹角。初始边逆时针旋转为正值&#xff0c;顺时针旋转为逆值。数学表示&#xff1a;角度&#xff1a;degreeradian*180/π 弧度&#xff1a;radiandegree*π/18…

医学影像PACS系统解决方案与成功案例汇总

经历过2010年一年时间&#xff0c;HC3i论坛也与大家相伴快一年了&#xff0c;这一年中&#xff0c;网友分享专业医疗信息化资料超过15000个&#xff0c;HC3i感谢大家的支持与厚爱&#xff01;岁末年初之极&#xff0c;也整理盘点一下&#xff0c;方便大家回顾一年中精华资源&am…

npm 安装包报错 rollbackFailedOptional

npm config rm proxynpm config rm https-proxy 然后使用npm install -g cnpm --registryhttps://registry.npm.taobao.org安装淘宝的cnpm 然后就可以使用cnpm命令了转载于:https://www.cnblogs.com/xtjatswc/p/10295734.html

一个小老板的春天

大家周末好继续之前说的采访专栏&#xff0c;前两天和一个做生意的朋友聊天&#xff0c;总结了一些内容分享给大家&#xff0c;觉得不错的点赞收藏起来&#xff0c;可能后面你自己当老板了会用到。我这个老板的名字和公司名字我就不说出来了&#xff0c;他现在做的是细分领域&a…

boost学习之boost::shared_ptr

Boost智能指针——shared_ptr boost::scoped_ptr虽然简单易用&#xff0c;但它不能共享所有权的特性却大大限制了其使用范围&#xff0c;而boost::shared_ptr可以解决这一局限。顾名思义&#xff0c;boost::shared_ptr是可以共享所有权的智能指针&#xff0c;首先让我们通过一…

SharePoint GridView的使用2——DataSourceView的使用

首先创建一个abstract类&#xff0c;继承Microsoft.SharePoint.WebControls.DataTableDataSourceView。之后基于这个类可以创建多个显示不同数据的的DataSourceView&#xff0c;在上文的DataSource控件中有个ViewName属性&#xff0c;可以通过这个属性来区分不同的DataSourceVi…

瞧瞧UC浏览器对CSS样式的“关怀”

瞧瞧UC浏览器对CSS样式的“关怀” UC对CSS这样的“照顾”尤其8.0以下体现的是淋漓尽致&#xff01; 不"支持"font-family属性&#xff0c;也就是说&#xff0c;在UC浏览器你只能看到一种字体&#xff1b;不"支持"font-szie属性&#xff0c;也就是说&#…

我在ARM板上写的第一个驱动程序

有时大家喜欢拿电灯来当作笑谈&#xff0c;实际上点灯包含多内容很多&#xff0c;如下这篇文章就是关于嵌入式Linux点灯多技术栈&#xff0c;推荐给大家。摘要&#xff1a;搞嵌入式有两个方向&#xff0c;一个是嵌入式软件开发(MCU方向)&#xff0c;另一个是嵌入式软件开发(Lin…

从github上克隆hibernate项目

开发的项目用到了hibernate进行对象的持久化&#xff0c;最近项目上不忙&#xff0c;打算通过官方文档和源码来进行深度学习。第一步将hibernate部署到本地就折腾了好久&#xff0c;打算记录一下。 关于github的注册说一句&#xff0c;推荐使用outlook邮箱进行注册&#xff0c;…

string、char *、char []之间的相互转换

最近工作中遇到了string、char *、char []之间的相互转换&#xff0c;今天终于抽出时间将他们之间的转换记录下来&#xff0c;使用的是CodeBlocks软件&#xff0c;编译器为GNU GCC compiler&#xff0c;下面看代码&#xff1a; #include <iostream> #include <stdio.…

C语言中匿名的最高境界

C语言中有没有见过(int [2]){19,20}或者int (*pt2)[4]的使用方法&#xff0c;字面上可能不好理解&#xff0c;这是C99之后才新增的知识点&#xff0c;名为复合型表述Compound Literals&#xff0c;一旦熟悉使用&#xff0c;便会体会到它简洁而强大的表达。什么是”复合型表述“…

类与对象(C++)

2.1 类与对象2.1.1 结构体2.1.2 类 2.1 类与对象 2.1.1 结构体 C中的结构体不仅可以包含不同类型的数据&#xff0c;而且还可以包含操作这些数据的函数。 #include <iostream> using namespace std;struct Complex{double i;double r;void init(double rr, double ii)…

Mysql数据库的分离和附加转

一.MYSQL的命令行模式的设置&#xff1a;桌面->我的电脑->属性->环境变量->新建->PATH“&#xff1b;path/mysql/bin;”其中path为MYSQL的安装路径。二.简单的介绍一下命令行进入MYSQL的方法&#xff1a;1.C:/>mysql -h hostname -u username -p 按ENTER键&a…

Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程

预知小知识&#xff1a; Python中的变量与其他语言稍有差异&#xff0c;如a 10并不是直接在内存中创建一个变量a其值为10&#xff0c;而是在内存中创建一个a这个a指向这个10&#xff0c;在Python中所有牵扯到等号的均不是值赋值&#xff0c;全都是引用(C的小伙伴可以大致理解为…

codeblocks安装后提示找不到编译器

安装了自带编译器的codeblocks&#xff0c;但是打开后提示没有找到compiler&#xff0c; 经过几分钟的搜索&#xff0c;找了原因&#xff1a; 打开codeblocks&#xff0c;进入settings->compiler&#xff0c;选择如下: 然后&#xff0c;选择Toolchain executables&#xff…

欢迎加入Hello China技术讨论群组-QQ群:38467832

欢迎加入Hello China技术讨论群组-QQ群&#xff1a;38467832 在此群组内&#xff0c;我们可一起讨论Hello China及其它嵌入式操作系统的技术问题、应用问题以及其它相关问题。 Hello China相关的技术文档和实现文章&#xff0c;也会首先在该群组内发布给群内朋友。 转载于:http…

一文读懂|栈溢出攻击

什么是栈简单来说&#xff0c;栈 是一种 LIFO&#xff08;Last In Frist Out&#xff0c;后进先出&#xff09; 形式的数据结构。栈一般是从高地址向低地址增长&#xff0c;并且栈支持 push&#xff08;入栈&#xff09; 和 pop&#xff08;出栈&#xff09; 两个操作。如下图所…

用来做 favicon 的站点

这个站点是最好用的 http://converticon.com/转载于:https://www.cnblogs.com/johnsonshu/archive/2012/06/28/2568530.html

Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

题目链接&#xff1a;https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意&#xff1a;一个长度为n的数组&#xff0c;数组的元素都在[L,R]之间&#xff0c;并且数组全部元素的和可以被3整除&#xff0c;问有多少种方法构建出该数组。答案模1000000007 例 输…

c++并发编程之原子操作的实现原理

原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”. 处理器如何实现原子操作 (1) 使用总线锁保证原子性 如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写…