Vous n'avez pas spécifié s'il s'agit d'une fonction membre ou globale. Puisque vous voulez vous moquer de lui dans un cadre moqueur C++, je suppose que c'est le cas. Aussi, comme l'a dit Antonio, si vous voulez modifier le vecteur, vous devez changer la signature de votre fonction et passer data
en utilisant une référence. Donc, si func1
est un membre de la classe MyClass
, vous voulez faire ce qui suit.
Créer une interface IMyClass
et faites votre classe implémente cette interface:
class IMyClass
{
public:
virtual IMyClass() {}
virtual bool func1(vector<string> &data) = 0;
}
class MyClass : public IMyClass
{
bool func1(vector<string> &data) override
{
// Your code that modifies 'data'
}
}
Ensuite, faire une classe fantaisie qui implémente également cette interface en utilisant gmock:
class MyClassMock : public IMyClass
{
public:
MOCK_METHOD1(func1, bool(vector<string> &));
}
Enfin, dans vos tests, vous pouvez simuler des appels à cette fonction. Dites que vous voulez simuler l'appel qui définira deux chaînes ("str1"
, "str2"
) au vecteur data
. C'est ce que vous feriez dans le corps de test:
vector<string> dummyData = { string("str1"), string("str2") };
MyClassMock mockObj;
EXPECT_CALL(mockObj, func1(_))
.WillOnce(DoAll(SetArgReferee<0>(dummyData), Return(true)));
Si func1
est une fonction globale, vous pouvez utiliser la même approche en définissant une petite interface et de l'appeler par cette interface dans votre code de production.
1. Qu'avez-vous essayé jusqu'à présent? 2. Avec cette signature, votre fonction remplira, le cas échéant, ** une copie ** de 'data', mais pas' data'self. –