vs2010使用gmock

来源:互联网 发布:天猫魔盒上的直播软件 编辑:程序博客网 时间:2024/05/22 06:39

#include <iostream>
#include <string>
#include <vector>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using namespace std;
//连接gmock.lib
#pragma comment(lib,"gmock.lib")

//定义UserInterface类,值提供接口,没有具体实现
class UserInterface
{
public:
 virtual ~UserInterface() {}
public:
 virtual std::string getArbitraryString() = 0;
 virtual int getAdd(int a,int b) = 0;
 virtual void addString( std::vector<string> v ) = 0;
};

//MockUser类,继承UserInterface 
class MockUser: public UserInterface
{
public:
 //MOCK_METHOD0代表没有参数,MOCK_METHOD1代表有一个参数,MOCK_METHOD2代表有两个参数
 //MOCK_METHOD0~10 MOCK_METHOD最多支持10个形参
 /*MOCK_METHOD0函数原型如下: tn,constness,ct参数为空,Method为方法名,F为函数结构
  GMOCK_METHOD0_(tn, constness, ct, Method, F) \
  GMOCK_RESULT_(tn, F) ct Method() constness { \
  GTEST_COMPILE_ASSERT_(::std::tr1::tuple_size< \
  tn ::testing::internal::Function<F>::ArgumentTuple>::value == 0, \
  this_method_does_not_take_0_arguments); \
  GMOCK_MOCKER_(0, constness, Method).SetOwnerAndName(this, #Method); \
  return GMOCK_MOCKER_(0, constness, Method).Invoke(); \
 } */
 MOCK_METHOD0(getArbitraryString, std::string());
 MOCK_METHOD2(getAdd, int(int x,int y) );
 MOCK_METHOD1(addString , void( std::vector<string> v));
};

using ::testing::Return;

int main(int argc, char** argv)
{
 //初始化
 ::testing::InitGoogleMock(&argc, argv);
 string value = "This is Mock!";
 //创造对象
 MockUser mockFoo;

 //定义一个期望行为,其中Times(1)的意思是运行一次,
 //WillOnce(Return(value))的意思是第一次运行时把
 //value作为getArbitraryString()方法的返回值。
 EXPECT_CALL(mockFoo, getArbitraryString()).Times(1).
  WillOnce(Return(value));

 //::testing::Eq(1)表示输入参数等于1, ::testing::Gt(0)表示输入参数大于0
 //如果不符合,则会报错
 //::testing::AtLeast(1)表示至少运行1次
 EXPECT_CALL(mockFoo, getAdd(::testing::Eq(1), ::testing::Gt(0)))
  .Times(::testing::AtLeast(1)).WillOnce(Return(200));

 vector<string> v;
 EXPECT_CALL(mockFoo, addString(v)).Times(1);

 string returnValue = mockFoo.getArbitraryString();
 cout << "Returned Value: " << returnValue << endl;
 cout << "Returned Value: " << mockFoo.getAdd(1,2)<< endl;

 getchar();
 return EXIT_SUCCESS;
}