2016-12-12 6 views
1

Hallo, Wie spotten wir eine Variable unter #define? Google Mock docs spricht über meist Methoden und Objekte, aber nicht Spott Konstanten. Am nächsten kann ich daran denken, einen Aufruf an eine falsche Klasse zu delegieren, wenn der Testwert zurückgegeben wurde.Wie Konstanten in Google Mock Mock?

Ich habe eine Header-Datei mit einer Liste von Variablen, ich will es verspotten, so dass, wenn BLAH im Test aufrufen, ich "Mockblahstring" statt "Blahstring" bekomme.

Jeder Beispielcode würde helfen.

danke.

+1

Mit '# undef 'könnten Sie die Makrodefinition ändern - siehe http://stackoverflow.com/questions/9274500/redefining-or-changing-macro-value. Es hat jedoch möglicherweise keine Auswirkungen auf bereits kompilierte Dateien und Dateien, deren Änderung nicht sichtbar ist. Und die offenherzige Antwort auf Ihre Frage lautet: Tu das nicht - es macht wenig Sinn, Konstanten zu ändern, wenn du Unit-Tests machst ... – PiotrNycz

Antwort

1

Eine #define ist keine Konstante.

Es ist ein Makro (siehe here für weitere Informationen). Der Compiler tritt ein und ersetzt alle Vorkommen dieses Makros, lange bevor irgendeine gmock-Bibliothek "ihre Finger" darauf bekommt.

Mit anderen Worten: Ihr kompiliertes Objekt enthält kein BLAH "Objekt". Es enthält nur die entsprechende Zeichenfolge an all jenen Stellen, an denen du BLAH notiert hast.

In diesem Sinne: Es gibt keine Möglichkeit, "Entitäten" zu verspotten, die einfach nicht mehr existieren.

Die wirkliche Antwort hier: das ist einer der vielen Gründe, warum Sie Preprozessor-Makros niemals als "Konstanten" verwenden sollten. Weil sie keine Konstanten sind! Es gibt immer noch Orte, wo sie sinnvoll sind, aber definitiv nicht als Ersatz für Konstanten.

In diesem Sinne: Sie sollten besser zurücktreten und lernen über solche grundlegenden Dinge, bevor Sie etwas anderes tun.