#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;
}
vs2010使用gmock
最新推荐文章于 2023-10-09 20:20:21 发布