各位大神,有关于gmock的问题,帮忙指点,下面这种情况Camera类中的Encoder成员变量,可以用gmock模拟行为吗?现在测试case每次走的都是源码,不是我的EncoderMock设定的返回值。如果可以,请指教,谢谢。
//camera.h
class Encoder
{
public:
virtual ~Encoder(){};
virtual int startRecord(int type);
};
class Camera
{
public:
Camera();
virtual ~Camera(){};
virtual int startRecord(int type);
private:
Encoder m_Encoder;
};
//camera.cpp
int Encoder::startRecord(int type)
{
printf("Encoder::startRecord\n");
if (type == 1)
{
printf("E:type == 1\n");
return 1;
}
else
{
printf("E:type == %d\n",type);
return 2;
}
}
int Camera::startRecord(int type)
{
return m_Encoder.startRecord(type);
}
//sampleRecordEncoderMock.h
class EncoderMock:public Encoder
{
public:
//virtual int startRecord(int type);
MOCK_METHOD1(startRecord, int(int));
public:
//int m_nStartRecordParam;
};
//ut.cpp
#include
#include "gtest/gtest.h"
#include "sampleRecordEncoderMock.h"
#include "camera.h"
using namespace std;
using ::testing::Return;
using ::testing::Eq;
TEST(RecordTest, typeVideo) {
EncoderMock *encoderMock = new EncoderMock();
Camera cam;
int nMockRet = 2;
EXPECT_CALL(*encoderMock, startRecord(Eq(1))).Times(1).WillOnce(Return(nMockRet));
int nTesterRet = cam.startRecord(1,muxMock);
EXPECT_EQ(2, nTesterRet);
delete encoderMock;
}