C++ 使用指向mock对象的指针在googlemock中设置期望值
我请求您提供有关使用指向mock对象的指针设置mock方法期望值的输入/建议/帮助。 堆栈位于CPP中,应用程序使用new运算符创建堆栈类的对象。 在单元测试中,需要对源代码中创建的模拟对象设置期望值。 先谢谢你 请在下面查找代码段:C++ 使用指向mock对象的指针在googlemock中设置期望值,c++,googletest,gmock,C++,Googletest,Gmock,我请求您提供有关使用指向mock对象的指针设置mock方法期望值的输入/建议/帮助。 堆栈位于CPP中,应用程序使用new运算符创建堆栈类的对象。 在单元测试中,需要对源代码中创建的模拟对象设置期望值。 先谢谢你 请在下面查找代码段: StackBT.h class StackBT { MOCK_METHOD0(registerCallbacks, void()); MOCK_METHOD2(...) MOCK_METHOD4(...) } ApplicationBT.h:
StackBT.h
class StackBT
{
MOCK_METHOD0(registerCallbacks, void());
MOCK_METHOD2(...)
MOCK_METHOD4(...)
}
ApplicationBT.h:
class ApplicationBT
{
public:
ApplicationBT() : mpoStackBT(new StackBT())
void init()
{
mpoStackBT->registerCallbacks();
}
friend class TestApplicationBT;
StackBT* mpoStackBT;
}
TestApplicationBT.h
class TestApplicationBT : public ::testing::Test
{
protected:
virtual void SetUp ()
{
ptrApplicationBT = new ApplicationBT();
}
void TearDown()
{
delete ptrApplicationBT;
}
public:
TestApplicationBT ()
{
}
~TestApplicationBT ()
{
ptrApplicationBT = NULL;
}
scoped_ptr<ApplicationBT> ptrApplicationBT;
};
TEST_F(TestApplicationBT, TEST_FUNC_CALL_IN_MOCK_CREATED_INSIDE_ApplicationBT_USING_NEW)
{
EXPECT_CALL(ptrApplicationBT->mpoStackBT, registerCallbacks()).Times(1);//Need to pass the object instead of the reference to StackBT
ptrApplicationBT->init();
}
StackBT.h
类StackBT
{
模拟方法0(registerCallbacks,void());
模拟方法2(…)
模拟方法4(…)
}
应用程序bt.h:
类应用程序BT
{
公众:
ApplicationBT():mpoStackBT(新的StackBT())
void init()
{
mpoStackBT->registerCallbacks();
}
朋友类测试应用BT;
StackBT*mpoStackBT;
}
测试应用程序bt.h
类TestApplicationBT:public::testing::Test
{
受保护的:
虚拟无效设置()
{
ptrApplicationBT=新应用程序bt();
}
void TearDown()
{
删除ptrApplicationBT;
}
公众:
测试应用程序BT()
{
}
~TestApplicationBT()
{
ptrApplicationBT=NULL;
}
作用域的ptr ptrApplicationBT;
};
测试(TestApplicationBT,TEST FUNC调用在模拟中创建,在应用程序BT内部使用新创建)
{
EXPECT_调用(ptrApplicationBT->mpoStackBT,registerCallbacks())。次(1);//需要传递对象而不是对StackBT的引用
ptrApplicationBT->init();
}
为什么模拟对象的指针放在第一位?原因是StackBT是在应用程序BT内部使用源代码中的新运算符创建的。调用ApplicationBT::init()时,stackBT::registerCallbacks()。因此,我需要在TestApplicationBT中获取在ApplicationBT内部创建的此StackBT的引用,以便能够为模拟对象的同一实例设置期望值。无论如何,简单的取消引用应该可以在期望值处指定模拟对象。但是我仍然不明白,为什么它需要是ApplicationBT
类中的指针。我担心简单的去引用会起作用。我尝试了EXPECT_调用(*(ptrApplicationBT->mpoStackBT),registerCallbacks())。次(1);下面抛出了编译错误:“define EXPECT CALL(obj,CALL)GMOCK\u EXPECT\u CALL\u IMPL(obj,CALL),没有运算符”“匹配这些操作数”“我自己正在使用指针模拟对象,我可以确认解引用是有效的。这不是一般的问题,只是代码中的一些内容