0Pricing
C++ Academy · Lektion

Fixtures und Setup

Test-Setup gemeinsam nutzen

Fixtures und Setup ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Setup zwischen Tests teilen

Wenn mehrere Tests dieselben Objekte benötigen, können Sie mit einer Fixture das Setup einmalig definieren. Eine Fixture ist eine von ::testing::Test abgeleitete Klasse.

Eine Fixture definieren

Die Member der Fixture sind in jedem Test zugänglich, der sie verwendet. SetUp() wird vor jedem Test und TearDown() danach ausgeführt.

#include <gtest/gtest.h>
#include <vector>

class VectorTest : public ::testing::Test {
protected:
    std::vector<int> v;
    void SetUp() override { v = {1, 2, 3}; }
};

TEST_F verwenden

Tests, die eine Fixture verwenden, werden mit TEST_F geschrieben. Als erstes Argument wird der Name der Fixture-Klasse übergeben.

#include <gtest/gtest.h>
#include <vector>

class VectorTest : public ::testing::Test {
protected:
    std::vector<int> v{1, 2, 3};
};

TEST_F(VectorTest, HasThree) {
    EXPECT_EQ(v.size(), 3u);
}

TEST_F(VectorTest, FirstIsOne) {
    EXPECT_EQ(v.front(), 1);
}

Neue Instanz pro Test

GTest erstellt für jeden Test ein neues Fixture-Objekt. Tests teilen niemals veränderlichen Zustand und bleiben dadurch unabhängig; ihre Reihenfolge spielt keine Rolle.

SetUp im Vergleich zum Konstruktor

Sie können Member im Konstruktor oder in SetUp() initialisieren. Verwenden Sie SetUp(), wenn die Initialisierung eine Ausnahme auslösen kann oder wenn Sie virtuelle Methoden sicher aufrufen möchten.

#include <gtest/gtest.h>

class Resource : public ::testing::Test {
protected:
    int* data = nullptr;
    void SetUp() override { data = new int(10); }
    void TearDown() override { delete data; }
};

TEST_F(Resource, HasTen) {
    EXPECT_EQ(*data, 10);
}

TearDown für die Bereinigung

TearDown() gibt die in SetUp() erworbenen Ressourcen frei. Bei RAII-Membern übernimmt der Destruktor dies oft automatisch, sodass Sie TearDown() möglicherweise überhaupt nicht benötigen.

Setup auf Testsuite-Ebene

Verwenden Sie für teure gemeinsam genutzte Ressourcen die statischen Methoden SetUpTestSuite() und TearDownTestSuite(). Sie werden einmal pro Testsuite und nicht für jeden Test ausgeführt.

#include <gtest/gtest.h>

class DbTest : public ::testing::Test {
protected:
    static void SetUpTestSuite() { /* open shared connection */ }
    static void TearDownTestSuite() { /* close it */ }
};

Pro Test im Vergleich zu pro Testsuite

Wählen Sie sorgfältig.

  • SetUp/TearDown: pro Test, isoliert und sicher
  • SetUpTestSuite/TearDownTestSuite: pro Testsuite, gemeinsam genutzt, schneller, aber mit möglicher gegenseitiger Beeinflussung der Tests

Helfermethoden

Fixtures können von mehreren Tests verwendete Helfermethoden enthalten, sodass jeder Test auf seine Assertions konzentriert bleibt.

#include <gtest/gtest.h>
#include <string>

class ParserTest : public ::testing::Test {
protected:
    int parse(const std::string& s) { return std::stoi(s); }
};

TEST_F(ParserTest, ParsesNumber) {
    EXPECT_EQ(parse("42"), 42);
}

Globale Umgebung

Für ein prozessweites Setup, das einmal vor jedem Test ausgeführt wird, registrieren Sie über AddGlobalTestEnvironment eine ::testing::Environment. Das ist beispielsweise für Protokollierung oder die Initialisierung eines Frameworks nützlich.

Tests unabhängig halten

Da jede TEST_F-Ausführung eine neue Fixture erhält, dürfen Sie sich niemals auf Seiteneffekte eines anderen Tests verlassen. Unabhängigkeit erleichtert die Diagnose von Fehlern und ermöglicht eine sichere parallele Ausführung der Tests.

Kurze Überprüfung

Rufen Sie sich den Lebenszyklus einer Fixture in Erinnerung.

Zusammenfassung

Sie haben Fixtures kennengelernt.

  • Leiten Sie von ::testing::Test ab und verwenden Sie TEST_F
  • SetUp/TearDown werden pro Test ausgeführt; jedes Mal wird ein neues Objekt erstellt
  • Verwenden Sie SetUpTestSuite für gemeinsam genutzte Ressourcen, die einmal pro Testsuite eingerichtet werden
  • Helfer und globale Umgebungen unterstützen größere Testsuites

Häufig gestellte Fragen

Ist die Lektion „Fixtures und Setup“ kostenlos?

Ja — der vollständige Text von „Fixtures und Setup“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Fixtures und Setup“?

Test-Setup gemeinsam nutzen Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Fixtures und Setup“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. GTest einrichten
  2. Assertions und Matcher
  3. Fixtures und Setup
  4. Mocking mit GMock
← Zurück zu C++ Academy