Verwendung von Google Test 1.6 (Windows 7, Visual Studio C++). Wie kann ich einen bestimmten Test deaktivieren? (auch bekannt als wie kann ich verhindern, dass ein Test ausgeführt wird). Was kann ich tun, außer den ganzen Test zu kommentieren?
GoogleTest: Wie überspringe ich einen Test?
Benutzer
Rechnung
Das Dokumente für Google-Test 1.7 empfehlen:
Wenn Sie einen fehlerhaften Test haben, den Sie nicht sofort reparieren können, können Sie den hinzufügen
DISABLED_
Präfix zu seinem Namen. Dadurch wird es von der Ausführung ausgeschlossen. Dies ist besser, als den Code zu kommentieren oder zu verwenden#if 0
da deaktivierte Tests weiterhin kompiliert werden (und daher nicht verrotten).
Beispiel aus obiger Dokumentation:
// Tests that Foo does Abc. TEST(FooTest, DISABLED_DoesAbc) { ... } class DISABLED_BarTest : public testing::Test { ... }; // Tests that Bar does Xyz. TEST_F(DISABLED_BarTest, DoesXyz) { ... }
-
habe es auch gerade gefunden und filtert
– Benutzer
26. August 2011 um 17:01 Uhr
-
@Bill, ich habe es gefunden, kurz bevor Sie Ihren Kommentar gepostet haben … (und ich habe es auch als Antwort angegeben). Ich habe dann meinen Kommentar entfernt, weil ich dachte, dass er veraltet ist … aber das sind wirklich gute Informationen! +1
– Kiril
26. August 2011 um 17:05 Uhr
-
Aber das Deaktivieren ist kein Überspringen. Das Überspringen ist ein vorübergehend nicht verfügbarer Zustand (z. B. nicht mit dem Internet verbunden) und wird nur dynamisch im Setup-Aufruf erkannt. Ich erwähne es nur, da dies 11 Jahre später das Google-Ergebnis Nr. 1 ist
– Lothar
7. April um 9:00 Uhr
Kiril
Du kannst auch Führen Sie eine Teilmenge von Tests auslaut Dokumentation:
Ausführen einer Teilmenge der Tests
Standardmäßig führt ein Google-Testprogramm alle Tests aus, die der Benutzer definiert hat. Manchmal möchten Sie nur eine Teilmenge der Tests ausführen (z. B. zum Debuggen oder schnellen Überprüfen einer Änderung). Wenn Sie die Umgebungsvariable GTEST_FILTER oder das Flag –gtest_filter auf eine Filterzeichenfolge setzen, führt Google Test nur die Tests aus, deren vollständige Namen (in Form von TestCaseName.TestName) mit dem Filter übereinstimmen.
Das Format eines Filters ist eine ‘:’-getrennte Liste von Wildcard-Mustern (als positive Muster bezeichnet), optional gefolgt von einem ‘-‘ und einer weiteren ‘:’-getrennten Musterliste (als negative Muster bezeichnet). Ein Test stimmt mit dem Filter genau dann überein, wenn er mit einem der positiven Muster, aber nicht mit einem der negativen Muster übereinstimmt.
Ein Muster kann ‘*’ (entspricht einer beliebigen Zeichenfolge) oder ‘?’ (entspricht jedem einzelnen Zeichen). Der Einfachheit halber kann der Filter „*-NegativePatterns“ auch als „-NegativePatterns“ geschrieben werden.
Zum Beispiel:
./foo_test Has no flag, and thus runs all its tests. ./foo_test --gtest_filter=* Also runs everything, due to the single match-everything * value. ./foo_test --gtest_filter=FooTest.* Runs everything in test case FooTest. ./foo_test --gtest_filter=*Null*:*Constructor* Runs any test whose full name contains either "Null" or "Constructor". ./foo_test --gtest_filter=-*DeathTest.* Runs all non-death tests. ./foo_test --gtest_filter=FooTest.*-FooTest.Bar Runs everything in test case FooTest except FooTest.Bar.
Nicht die schönste Lösung, aber es funktioniert.
-
In meinem Fall muss ich die Filterbedingung in Anführungszeichen setzen, da * als Platzhalter erkannt wird.
– dt
21. April um 9:51 Uhr
Peter Bloomfield
Sie können jetzt die verwenden GTEST_SKIP()
Makro, um einen Test zur Laufzeit bedingt zu überspringen. Zum Beispiel:
TEST(Foo, Bar)
{
if (blah)
GTEST_SKIP();
...
}
Beachten Sie, dass dies ein sehr ist aktuelle Funktion Daher müssen Sie möglicherweise Ihre GoogleTest-Bibliothek aktualisieren, um sie verwenden zu können.
-
Diese Funktion ist noch nicht freigegeben. Es ist unwahrscheinlich, dass es in einen 1.8.x-Zweig aufgenommen wird, da dort nur Korrekturen akzeptiert werden. 1.9 ist noch nicht verfügbar, noch nicht einmal angekündigt.
– Okrokette
14. April 2019 um 7:11 Uhr
-
GTEST_SKIP()
ist ab 1.10.0 verfügbar.– mattdibi
25. März 2020 um 17:02 Uhr
-
Leider ist die Dokumentation dazu noch spärlich. Scheint es auch zu geben
GTEST_SKIP_("some message")
(beachten Sie den abschließenden Unterstrich)– Brandlingo
16. April 2020 um 15:27 Uhr
-
Es ist
#define GTEST_SKIP() GTEST_SKIP_("")
in gtest.h um eine optionale Skip-Nachricht zuzulassen.– Sebkrämer
18. November 2020 um 7:47 Uhr
Aschtosch
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:
--gtest_filter=*foo1*:*foo2*-*bar1*:*bar2*
Ich ziehe es vor, es in Code zu tun:
// Run a specific test only
//testing::GTEST_FLAG(filter) = "MyLibrary.TestReading"; // I'm testing a new feature, run something quickly
// Exclude a specific test
testing::GTEST_FLAG(filter) = "-MyLibrary.TestWriting"; // The writing test is broken, so skip it
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, ich aber alles andere testen möchte.
Sie können auch eine Reihe von Funktionen testen/ausschließen, indem Sie Platzhalter verwenden und eine Liste schreiben, „MyLibrary.TestNetwork*“ oder „-MyLibrary.TestFileSystem*“.
-
Dies ist eine großartige Lösung. Ich verwende es, um einige Tests standardmäßig auszuschließen, wenn der Filter leer ist. Sie können mit aktiviert werden
export GTEST_FILTER='*'
.– Timmm
13. Juli 2017 um 14:24 Uhr
-
Eigentlich funktioniert das nicht, weil die Voreinstellung “
*
” nicht “”. Stattdessen verwende ich einfach eine andere Umgebungsvariable, die den Filter überschreibt.– Timmm
13. Juli 2017 um 14:36 Uhr
-
Wo hast du den “Filter” definiert? Ist es eine Schnur?
– Beasone
19. Februar 2019 um 21:34 Uhr
-
Ich definiere es nicht, also denke ich, dass es ein globaler Bestandteil von gtest/gtest.h sein muss?
– pilch
20. Februar 2019 um 12:56 Uhr
Vijay C
Wenn mehr als ein Test erforderlich ist, überspringen Sie ihn
--gtest_filter=-TestName.*:TestName.*TestCase
-
Dies ist eine großartige Lösung. Ich verwende es, um einige Tests standardmäßig auszuschließen, wenn der Filter leer ist. Sie können mit aktiviert werden
export GTEST_FILTER='*'
.– Timmm
13. Juli 2017 um 14:24 Uhr
-
Eigentlich funktioniert das nicht, weil die Voreinstellung “
*
” nicht “”. Stattdessen verwende ich einfach eine andere Umgebungsvariable, die den Filter überschreibt.– Timmm
13. Juli 2017 um 14:36 Uhr
-
Wo hast du den “Filter” definiert? Ist es eine Schnur?
– Beasone
19. Februar 2019 um 21:34 Uhr
-
Ich definiere es nicht, also denke ich, dass es ein globaler Bestandteil von gtest/gtest.h sein muss?
– pilch
20. Februar 2019 um 12:56 Uhr
David C. Bischof
Bei einem anderen Ansatz können Sie Ihre Tests in eine Funktion packen und zur Laufzeit normale Bedingungsprüfungen verwenden, um sie nur dann auszuführen, wenn Sie dies wünschen.
#include <gtest/gtest.h>
const bool skip_some_test = true;
bool some_test_was_run = false;
void someTest() {
EXPECT_TRUE(!skip_some_test);
some_test_was_run = true;
}
TEST(BasicTest, Sanity) {
EXPECT_EQ(1, 1);
if(!skip_some_test) {
someTest();
EXPECT_TRUE(some_test_was_run);
}
}
Dies ist nützlich für mich, da ich versuche, einige Tests nur durchzuführen, wenn ein System Dual-Stack-IPv6 unterstützt.
Technisch gesehen sollte dieses Dualstack-Zeug kein Unit-Test sein, da es vom System abhängt. Aber ich kann keine wirklichen Integrationstests durchführen, bis ich getestet habe, dass sie trotzdem funktionieren, und dies stellt sicher, dass keine Fehler gemeldet werden, wenn es nicht an den Codes liegt.
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 erfolgreicher 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.