2016-07-21 21 views
0

Ich verwende gtest und gmock in meinen Anwendungen und ich konnte den Zweck von Setup() und Teardown() Funktionen in gtest nicht verstehen. Nach meinem Verständnis Setup() Funktion wird vor jeder TEST_F Ausführung aufgerufen und Teardown() wird am Ende aufgerufen werden. Wir können die ::testing::Test Klasse constructor und destructor für den gleichen Zweck verwenden, richtig? Wo genau werden diese Funktionen verwendet?Welche Vorteile bietet die Funktion TearDown() und Setup()?

Antwort

1

Sie können diese Funktionen verwenden, um einen bestimmten Status von Ressourcen wiederherzustellen, die von allen Ihren Testfällen gemeinsam genutzt werden. Vor allem, wenn Ausnahmen in Ihren Testfällen involviert sind.

Von ihren documentation ihm gesagt:

Sie noch SetUp()/TearDown() in den folgenden seltenen Fällen verwenden mögen:

  • Wenn der tear-down Betrieb eine werfen könnte Ausnahme: Sie müssen TearDown() im Gegensatz zum Destruktor verwenden, da das Einwerfen eines Destruktors zu undefiniertem Verhalten führt und Ihr Programm normalerweise sofort zum Absturz bringt. Beachten Sie, dass viele Standardbibliotheken (wie STL) auslösen können, wenn Ausnahmen im Compiler aktiviert sind. Daher sollten Sie TearDown() bevorzugen, wenn Sie portable Tests schreiben möchten, die mit oder ohne Ausnahmen funktionieren.
  • Die Assertion-Makros verursachen eine Ausnahme, wenn das Flag angegeben ist. Daher sollten Sie Google Test-Assertionen nicht in einem Destruktor verwenden, wenn Sie Ihre Tests mit diesem Flag ausführen möchten.
  • In einem Konstruktor oder Destruktor können Sie keinen virtuellen Funktionsaufruf für dieses Objekt ausführen. (Sie können eine als virtuell deklarierte Methode aufrufen, die jedoch statisch gebunden ist.) Wenn Sie also eine Methode aufrufen müssen, die in einer abgeleiteten Klasse überschrieben wird, müssen Sie SetUp()/TearDown() verwenden.
+0

können Sie bitte ein Beispiel geben? wir können die Ressourcen teilen, indem Sie sie in die Testklasse richtig hinzufügen? Wenn eine Ressource Teil der Klasse Test ist, wird sie unter Testfunktionen aufgeteilt. Habe ich Recht? –

+0

3. Punkt bedeutet, dass SetUp() und TearDown() Funktionen von TEST_F Funktion aufgerufen werden können? Ich konnte den 3. Punkt nicht verstehen –

+0

@GilsonPJ Der Aufruf 'virtueller' Funktionen erfordert ein vollständig konstruiertes Objektinstanzen der Testklasse, diese können nicht innerhalb eines Konstruktor-Rumpfes gemacht werden. –