2016-11-09 4 views
1

Ich habe mehrere Test-Klassen jeweils ihre SetUp() und TearDown().GTEST: Identifizieren vor und nach einem SetUp und TearDown bzw.

Von was ich gelesen habe die Sequenz zum Ausführen von Testfällen nach RUN_ALL_TEST() ist nicht bekannt.

Ich möchte einen Dienst starten, bevor das erste SetUp aufgerufen wird, und den Dienst beenden, nachdem der letzte TearDown aufgerufen wurde.

Wie erreiche ich das? Ein Beispiel würde geschätzt werden.

Dank

Antwort

0

Sie std::call_once sonething verwenden, um sicherzustellen könnte wird nur einmal aufgerufen.

1

Erste Beobachtung ist, dass dies keine Komponententests sind, da sie "Dienste" benötigen, um ausgeführt zu werden. Ich schlage vor, die Anwendung neu zu entwerfen, damit Tests ohne externe Dienste ausgeführt werden können. Ein Ansatz könnte sein, abstrakte Klassen und Google Mock zu verwenden. Das Problem mit einem externen Dienst, der den normalen TearDown überlebt, ist, dass es Ihre ausdrückliche Verantwortung ist, sicherzustellen, dass der nächste Test eine saubere Umgebung findet: ein Test kann durch den Status eines vorherigen Tests unterbrochen werden.

Wenn Sie wirklich die Route langlebiger externe Dienste gehen möchten, lesen Sie über SetUpTestCase und TearDownTestCase im gtest advanced guide, die pro Testvorrichtung ermöglicht es, nur einmal den Dienst zu starten.

Es gibt eine noch gefährlichere Klasse Environment, die eine globale Einrichtung und einen Abbau ermöglicht (Suche im erweiterten Handbuch).

Aber wieder sind Ihre Tests spröde und schwer zu debuggen. Ich schlage vor, den Ansatz zu überdenken.

Verwandte Themen