2017-07-22 5 views
0

J'utilise Gmock dans mon projet. J'ai la fonction fictive suivante.Gmock - Comment définir une valeur de paramètre de fonction fictive à partir d'un paramètre d'entrée?

MOCK_METHOD2(helper, 
    bool(const std::string&, std::string*)); 

L'objectif est de définir la valeur du paramètre 1 sur le paramètre 2 pour tous les appels fictifs.

J'ai fait ce qui suit.

std::string temp; 

    EXPECT_CALL(
     MockObj, 
     helper(_,_)) 
     .WillRepeatedly(
      DoAll(SaveArg<0>(&temp), //Save first arg to temp 
       SetArgPointee<1>(temp), //assign it to second arg 
       Return(true))); 

Cependant, je vois que le paramètre 2 est réglé sur la valeur d'origine de tmp plutôt que sur la valeur enregistrée. Y a-t-il un autre moyen de résoudre ce problème? Je veux rendre cette EXPECT_CALL dynamique plutôt que de faire SetArgPointee < 1> ("testval").

Répondre

0

Les actions standard ne prennent pas en charge ce dont vous avez besoin. Vous devrez écrire un matcher personnalisé:

ACTION(AssignArg0ToArg1) { 
    *arg1 = arg0; 
} 

Et vous pouvez alors l'utiliser en combinaison avec Return(true). Plus d'informations sur les actions personnalisées peuvent être trouvées au https://github.com/google/googlemock/blob/master/googlemock/docs/DesignDoc.md.

+0

Merci de l'avoir signalé. Nous avons fini avec l'aide d'un lambda Invoke - .WillRepeatedly (DOALL ( Invoke ([] (const std :: string et entrée, std :: string * Sortie) {* sortie = entrée; }), Retour (true))); – balajiboss