Verwenden von Google Test 1.6 (Windows 7, Visual Studio C ++). Wie kann ich einen bestimmten Test ausschalten? (aka wie kann ich verhindern, dass ein Test ausgeführt wird). Kann ich etwas anderes tun, als den gesamten Test zu kommentieren?
googletest
Benutzer
quelle
quelle
Sie können auch eine Teilmenge von Tests gemäß der Dokumentation ausführen :
Ausführen einer Teilmenge der Tests
Nicht die schönste Lösung, aber es funktioniert.
quelle
Sie können das
GTEST_SKIP()
Makro jetzt verwenden , um einen Test zur Laufzeit bedingt zu überspringen. Beispielsweise:Beachten Sie, dass dies eine sehr aktuelle Funktion ist. Daher müssen Sie möglicherweise Ihre GoogleTest-Bibliothek aktualisieren, um sie verwenden zu können.
quelle
GTEST_SKIP()
ist ab 1.10.0 verfügbar.GTEST_SKIP_("some message")
(beachten Sie den nachfolgenden Unterstrich)Hier ist der Ausdruck, um Tests einzuschließen, deren Namen die Zeichenfolgen foo1 oder foo2 enthalten, und Tests auszuschließen, deren Namen die Zeichenfolgen bar1 oder bar2 enthalten:
quelle
Ich mache es lieber im Code:
Ich kann entweder beide Zeilen auskommentieren, um alle Tests auszuführen, die erste Zeile auskommentieren, um eine einzelne Funktion zu testen, die ich untersuche / an der ich arbeite, oder die zweite Zeile auskommentieren, wenn ein Test fehlerhaft ist, aber ich möchte alles andere testen.
Sie können eine Reihe von Funktionen auch testen / ausschließen, indem Sie Platzhalter verwenden und eine Liste "MyLibrary.TestNetwork *" oder "-MyLibrary.TestFileSystem *" schreiben.
quelle
export GTEST_FILTER='*'
.*
" nicht "" ist. Stattdessen verwende ich einfach eine andere Umgebungsvariable, die den Filter überschreibt.Wenn mehr als ein Test benötigt wird, wird übersprungen
quelle
Für einen anderen Ansatz können Sie Ihre Tests in eine Funktion einbinden und zur Laufzeit normale bedingte Prüfungen verwenden, um sie nur auszuführen, wenn Sie möchten.
Dies ist nützlich für mich, da ich versuche, einige Tests nur auszuführen, wenn ein System Dual-Stack-IPv6 unterstützt.
Technisch gesehen sollte dieses Dualstack-Zeug eigentlich kein Unit-Test sein, da es vom System abhängt. Aber ich kann keine Integrationstests durchführen, bis ich getestet habe, dass sie trotzdem funktionieren, und dies stellt sicher, dass keine Fehler gemeldet werden, wenn es nicht der Fehler des Codes ist.
Was den Test betrifft, habe ich Stub-Objekte, die die Unterstützung eines Systems für Dualstack (oder das Fehlen von) simulieren, indem sie gefälschte Sockets konstruieren.
Der einzige Nachteil ist, dass sich die Testausgabe und die Anzahl der Tests ändern, was zu Problemen mit etwas führen kann, das die Anzahl der erfolgreichen Tests überwacht.
Sie können auch ASSERT_ * anstelle von EQUAL_ * verwenden. Bestätigen Sie den Rest des Tests, wenn er fehlschlägt. Verhindert, dass viele redundante Inhalte auf die Konsole übertragen werden.
quelle
Ich hatte das gleiche Bedürfnis nach bedingten Tests und fand eine gute Problemumgehung. Ich habe ein Makro TEST_C definiert, das wie ein TEST_F-Makro funktioniert, aber es hat einen dritten Parameter, einen booleschen Ausdruck, der die Laufzeit in main.cpp ausgewertet hat, bevor die Tests gestartet werden. Tests, die false bewerten, werden nicht ausgeführt. Das Makro ist hässlich, aber es sieht aus wie:
Darüber hinaus benötigen Sie in Ihrer main.cpp diese Schleife, um die Tests auszuschließen, die false auswerten:
quelle