2013-05-07 11 views
2

Comment puis-je simuler une méthode qui renvoie un nouvel objet dont le constructeur prend l'un des arguments de la méthode comme argument?Passer des arguments à ReturnNew avec googlemock

// ObjectA::ObjectA(MockedObject arg1, ObjectB* arg2); 
// ObjectA* MockedObject::MockedMethod(ObjectB* arg); 
ON_CALL(mocked_object, MockedMethod(_)) 
    .WillByDefault(ReturnNew<ObjectA>(mocked_object, new ObjectB())); 

Dans l'exemple ci-dessus, plutôt que d'utiliser new ObjectB() comme argument pour ReturnNew<ObjectA>(), je voudrais utiliser l'argument passé à l'origine _MockedMethod.

Répondre

1

Je venais d'utiliser WithArg et Invoke avec un lambda plutôt que ReturnNew dans ce cas:

ON_CALL(mocked_object, MockedMethod(_)) 
    .WillByDefault(WithArg<0>(Invoke(
     [&mocked_object](ObjectB* b) { return new ObjectA(&mocked_object, b); }))); 
+0

Je ne peux pas utiliser 11 C++, donc je viens une fonction régulière OPPOSABLES AU. Merci! –