2015-11-02 1 views
0

Je veux créer une maquette de cette fonction:C++ gmock invoquez autre fonction avec les mêmes args

bool func1(vector<string> data) 

La fonction réelle doit remplir le vecteur et de retour vrai si elle a réussi.
Ma maquette devrait également remplir le vecteur avec des valeurs et retourner toujours vrai. comment puis-je le faire avec gmock?

+1

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. –

Répondre

1

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.

+0

Merci, ça marche !!! – Liad