白盒测试之gmock入门篇
作者:网络转载 发布时间:[ 2015/10/29 14:34:27 ] 推荐标签:单元测试
一、gmock是什么
gmock是google公司推出的一款开源的白盒测试工具。gmock是个很强大的东西,测试一个模块的时候,可能涉及到和其他模块交互,可以将模块之间的接口mock起来,模拟交互过程。其作用类似白盒测试中的打桩的概念。
下面简单的说说打桩在白盒测试中的重要性:
1、比如银行业务,需要测试业务模块。此时,不可能去操作真实的数据库,并且搭建新的数据库可能比较复杂或者耗时。那么可以用gmock将数据库接口地方打桩,来模拟数据库操作。
2、比如要测试A模块,必过A模块需要调用B模块的函数。如果B模块还没有实现,此时,可以用gmock将B模块的某些接口打桩。这样可以让A模块的测试继续进行下去。
3、比如网关设备,在用gtest测试device模块的时候,必须有真实的设备才能让测试进行下去。如果用gmock模拟一套sdk接口,那么无需真实的设备也能让测试进行下去。
二、gmock如何获取
gmock是google的开源工具,google的官网上是可以下载源码的。不过公司内部员工可以去0.2上去取,在“研发质量部”的文件夹下。gmock的新版本是1.7.0。下载下来的压缩包名称为“gmock-1.7.0.zip”。解压后,如下:
仔细观察发现,压缩包里面有gtest的文件夹,该文件夹里面是gtest的源码。因为大部分情况下,gmock是配合gtest来做白盒测试的。关于gtest的工程相关介绍请查看本博客其他文章。
本文暂时讨论windows下的gmock编译,工程相关的文件在msvc的文件夹中。msvc文件夹下又分为2005和2010文件夹,分别是用VS2005和VS2010建立的工程。
用VS2010打开工程,然后直接编译。编译通过后,会得到gmock.lib,gmock_maim.lib,gmock_test.ext三个文件。其中gmock.lib是我们所需要的库文件,其他两个工程本文暂不做阐述。
三、gmock的第一个demo
我们暂且模拟银行转账系统。银行转账系统涉及到数据库两个操作,首先要通过银行卡ID找到账户信息(包括账户余额等),然后在通过计算,将转账后的金额写入到转账双方。这样完成了简单的银行转账业务。
下面我们来mock(模拟)数据库的查询账户和写入金额的两个方法,定义一个头文件AccountManager.h :
// AccountManager.h
// the interface of external services which should be mocked
// 需要被mock的服务接口
#pragma once
#include <string>
#include "Account.h"
class AccountManager
{
public:
//通过账户号,找到对应的用户
virtual Account findAccountForUser(const std::string& userId) = 0;
//更新用户的信息这里
virtual void updateAccount(const Account& account) = 0;
};
AccountManager是需要被mock(模拟)的类。其中findAccountForUser(找到对应用户)和updateAccount(更新账户信息)是本次转账要mock的两个方法。注意,此处的两个方法用的是纯虚函数。因为这两个方法无需实现,测试的时候程序会走到mock出来的函数中,即使实现, 也不会被调用到。
下面通过gmock来mock(模拟)AccountManager的两个方法:
// MockAccountManager, mock AccountManager with googlemock
class MockAccountManager : public AccountManager
{
public:
MOCK_METHOD1(findAccountForUser, Account(const std::string&));
MOCK_METHOD1(updateAccount, void(const Account&));
};
类MockAccountManager是继承数据库DB方法类AccountManager的。其中MOCK_METHOD1为gmock的宏定义。头文件中还有其他类似宏定义,如MOCK_METHOD0,MOCK_METHOD2...
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11