2010-08-06 5 views
13

J'essaie de simuler une méthode basée sur un modèle.Comment se moquer des méthodes basées sur des modèles à l'aide de Google Mock?

Voici la classe qui contient la méthode de Mock:

class myClass 
{ 
public: 
    virtual ~myClass() {} 

    template<typename T> 
    void myMethod(T param); 
} 

Comment puis-je moquer de la méthode maméthode avec Google Mock?

+6

désolé d'être inutile, mais suis-je le seul qui, quand il voit ce genre de questions, a le premier instinct de répondre: « Vous êtes un modèle stupide! Et ta mère habillée vous drôle! Qui pourrait utiliser un tel stupide modèle stupide? " –

+1

Merci pour votre commentaire Brian ... Le code source que vous voyez est une partie d'une classe plus grande. Ce modèle n'est pas si stupide qu'il en a l'air ... –

+4

http://www.merriam-webster.com/dictionary/mock: traiter avec mépris ou ridicule –

Répondre

7

Dans la version précédente de Google Mock, vous pouvez seulement simuler des fonctions virtuelles, voir le documentation dans la page du projet.

Les versions plus récentes autorisées à se moquer non-virtual methods, en utilisant ce qu'ils appellent injection de dépendance salut-perf.

Comme congusbongus états:

Google Mock repose sur l'ajout de variables membres à soutenir moqueuse de la méthode, et puisque vous ne pouvez pas créer des variables membres du modèle, il est impossible de fonctions de modèle simulacres

A solution de contournement, par Michael Harrington dans le lien googlegroups à partir des commentaires, est de rendre spécialisés les méthodes de modèle qui appellera une fonction normale qui peut être moquée. Cela ne résout pas le cas général mais cela fonctionnera pour les tests.

struct Foo 
{ 
    MOCK_METHOD1(GetValueString, void(std::string& value)); 

    template <typename ValueType> 
    void GetValue(ValueType& value); 

    template <> 
    void GetValue(std::string& value) { 
     GetValueString(value); 
    } 
}; 
+1

Oui, vous avez raison Ismael, pour plus d'informations, j'ai trouvé ce lien: http://groups.google.com/group/googlemock/browse_thread/thread/e52b27b7d9b20145 Ainsi, il existe une solution de contournement pour simuler des méthodes basées sur des modèles. –

+1

Pour approfondir cette question, Google Mock s'appuie sur l'ajout de variables membres pour prendre en charge la mocking de méthode, et comme vous ne pouvez pas créer de variables de membre de modèle, il est impossible de simuler des fonctions de modèle. – congusbongus

Questions connexes