2010-08-06 11 views
13

Ich versuche, eine Vorlagenmethode zu verspotten.Wie man Vorlagen mit Google Mock vortäuscht?

Hier ist die Klasse die Methode enthält, zu verspotten:

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

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

Wie kann ich die Methode spotten MyMethod mit Google Mock?

+6

leider nicht hilfreich sein, aber ich bin die einzige, der, wenn er Fragen wie diese sieht, hat den ersten Instinkt „Du bist eine dumme Vorlage zu beantworten! Und deine Mutter gekleidet Sie lustig! Wer verwenden könnte eine so dumme, dumme Vorlage? " –

+1

Danke für Ihren Kommentar Brian ... Der Quellcode, den Sie sehen, ist ein Teil einer größeren Klasse. Diese Vorlage ist nicht so dumm, wie es aussieht ... –

+4

http://www.merriam-webster.com/dictionary/mock: mit Verachtung oder Spott zu behandeln –

Antwort

7

In früheren Versionen von Google Mock können Sie nur virtuelle Funktionen mocksen, siehe documentation auf der Projektseite.

Neuere Versionen erlaubt, non-virtual methods zu verspotten, mit dem, was sie hi-Perf Abhängigkeitsinjektion.

Wie congusbongus heißt es:

Google Mock setzt Membervariablen auf Hinzufügen Methode spöttisch zu unterstützen, und da Sie nicht Vorlage Membervariablen erstellen können, ist es unmöglich, Mock Template-Funktionen

A Workaround, von Michael Harrington in den googlegroups-Link aus den Kommentaren, ist die Template-Methoden spezialisiert, die eine normale Funktion aufrufen, die verspottet werden kann. Es löst nicht den allgemeinen Fall, aber es wird zum Testen funktionieren.

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

Ja, Sie haben Recht, Ismael, für weitere Informationen, fand ich Dieser Link: http://groups.google.com/group/googlemock/browse_thread/thread/e52b27b7d9b20145 So gibt es eine Problemumgehung, um Templates Methoden zu verspotten. –

+1

Um dies genauer auszuführen, ist Google Mock darauf angewiesen, Membervariablen hinzuzufügen, um Methodenspott zu unterstützen. Da Vorlagenelementvariablen nicht erstellt werden können, ist es nicht möglich, Template-Funktionen nachzuahmen. – congusbongus

Verwandte Themen