Google 模拟和受保护的复制构造函数
Google Mock and protected copy constructor
我有一个带有受保护复制构造函数的 class:
class ThingList
{
public:
ThingList() {}
virtual ~ThingList() {}
std::vector<Thing> things;
protected:
ThingList(const ThingList ©) {}
};
我还有一个class用这个:
class AnotherThing
{
public:
AnotherThing()
{
}
virtual ~AnotherThing() {}
void DoListThing(const ThingList &list)
{
}
};
和这个 class 的模拟版本:
class MockAnotherThing : public AnotherThing
{
public:
MOCK_METHOD1(DoListThing, void(const ThingList &list));
};
我想用一个真实的参数调用这个方法 DoListThing 来提供一个真实的列表:
TEST(Thing, DoSomeThingList)
{
MockThing thing;
ThingList list;
MockAnotherThing anotherThing;
list.things.push_back(Thing());
EXPECT_CALL(anotherThing, DoListThing(list));
anotherThing.DoListThing(list);
}
我在编译时遇到错误:
1>..\mockit\googletest\googlemock\include\gmock\gmock-matchers.h(3746): error C2248: 'ThingList::ThingList': cannot access protected member declared in class 'ThingList'
然而,如果我进行非 Mock 调用,它会正常工作:
ThingList list;
AnotherThing theRealThing;
theRealThing.DoListThing(list);
如果在模拟测试中我用'_'调用,它有效:
TEST(Thing, DoSomeThingList)
{
MockThing thing;
ThingList list;
MockAnotherThing anotherThing;
list.things.push_back(Thing());
EXPECT_CALL(anotherThing, DoListThing(_));
anotherThing.DoListThing(list);
}
但是,在这种情况下如何传递列表?如果列表是由 DoListThing 返回的,我可以使用 Return 但是对于这样修改的参数我该怎么办?
我无法通过受保护的复制构造函数,所以我的答案是创建一个 class 的假(虚拟)版本并忽略 Google Mock。这足以让我测试有问题的 class 。我在这里提供的示例是更大包的简化版本。
我有一个带有受保护复制构造函数的 class:
class ThingList
{
public:
ThingList() {}
virtual ~ThingList() {}
std::vector<Thing> things;
protected:
ThingList(const ThingList ©) {}
};
我还有一个class用这个:
class AnotherThing
{
public:
AnotherThing()
{
}
virtual ~AnotherThing() {}
void DoListThing(const ThingList &list)
{
}
};
和这个 class 的模拟版本:
class MockAnotherThing : public AnotherThing
{
public:
MOCK_METHOD1(DoListThing, void(const ThingList &list));
};
我想用一个真实的参数调用这个方法 DoListThing 来提供一个真实的列表:
TEST(Thing, DoSomeThingList)
{
MockThing thing;
ThingList list;
MockAnotherThing anotherThing;
list.things.push_back(Thing());
EXPECT_CALL(anotherThing, DoListThing(list));
anotherThing.DoListThing(list);
}
我在编译时遇到错误:
1>..\mockit\googletest\googlemock\include\gmock\gmock-matchers.h(3746): error C2248: 'ThingList::ThingList': cannot access protected member declared in class 'ThingList'
然而,如果我进行非 Mock 调用,它会正常工作:
ThingList list;
AnotherThing theRealThing;
theRealThing.DoListThing(list);
如果在模拟测试中我用'_'调用,它有效:
TEST(Thing, DoSomeThingList)
{
MockThing thing;
ThingList list;
MockAnotherThing anotherThing;
list.things.push_back(Thing());
EXPECT_CALL(anotherThing, DoListThing(_));
anotherThing.DoListThing(list);
}
但是,在这种情况下如何传递列表?如果列表是由 DoListThing 返回的,我可以使用 Return 但是对于这样修改的参数我该怎么办?
我无法通过受保护的复制构造函数,所以我的答案是创建一个 class 的假(虚拟)版本并忽略 Google Mock。这足以让我测试有问题的 class 。我在这里提供的示例是更大包的简化版本。