j'ai une classe avec un constructeur protégé contre la copie:Google Mock et constructeur protégé contre la copie
class ThingList
{
public:
ThingList() {}
virtual ~ThingList() {}
std::vector<Thing> things;
protected:
ThingList(const ThingList ©) {}
};
J'ai une autre classe les usages celui-ci:
class AnotherThing
{
public:
AnotherThing()
{
}
virtual ~AnotherThing() {}
void DoListThing(const ThingList &list)
{
}
};
et une version Mock de cette classe:
class MockAnotherThing : public AnotherThing
{
public:
MOCK_METHOD1(DoListThing, void(const ThingList &list));
};
Je veux appeler cette méthode DoListThing avec un vrai argument pour fournir une liste réelle:
TEST(Thing, DoSomeThingList)
{
MockThing thing;
ThingList list;
MockAnotherThing anotherThing;
list.things.push_back(Thing());
EXPECT_CALL(anotherThing, DoListThing(list));
anotherThing.DoListThing(list);
}
je reçois une erreur de compilation ceci:
1>..\mockit\googletest\googlemock\include\gmock\gmock-matchers.h(3746): error C2248: 'ThingList::ThingList': cannot access protected member declared in class 'ThingList'
Pourtant, si je fais un appel, il fonctionne non Mock très bien:
ThingList list;
AnotherThing theRealThing;
theRealThing.DoListThing(list);
Si dans le test de simulation j'appelle avec '_', cela fonctionne:
TEST(Thing, DoSomeThingList)
{
MockThing thing;
ThingList list;
MockAnotherThing anotherThing;
list.things.push_back(Thing());
EXPECT_CALL(anotherThing, DoListThing(_));
anotherThing.DoListThing(list);
}
Cependant, comment puis-je passer un liste dans ce cas? Si la liste a été retournée par DoListThing, je pourrais utiliser Return mais qu'est-ce que je fais pour un argument qui est modifié comme ceci?