0Pricing
C++ Academy · Lektion

Assertions und Matcher

Ausdrucksstarke Prüfungen schreiben

Assertions und Matcher ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Assertions formulieren Erwartungen

GTest-Assertions überprüfen Bedingungen innerhalb eines Tests. Es gibt sie in zwei Schweregraden.

  • EXPECT_*: Der Fehler wird aufgezeichnet, der Test wird fortgesetzt
  • ASSERT_*: Der Fehler beendet den aktuellen Test sofort

EXPECT im Vergleich zu ASSERT

Verwenden Sie ASSERT_*, wenn eine Fortsetzung zu einem Absturz führen würde, zum Beispiel nach einer Nullprüfung. Verwenden Sie ansonsten EXPECT_*, damit Sie alle Fehler gleichzeitig sehen.

#include <gtest/gtest.h>

TEST(Demo, MixedChecks) {
    int* p = new int(5);
    ASSERT_NE(p, nullptr);
    EXPECT_EQ(*p, 5);
    delete p;
}

Assertions für Vergleiche

Die wichtigsten Vergleichsmakros:

  • EXPECT_EQ, EXPECT_NE
  • EXPECT_LT, EXPECT_LE
  • EXPECT_GT, EXPECT_GE
#include <gtest/gtest.h>

TEST(Compare, Numbers) {
    EXPECT_LT(2, 3);
    EXPECT_GE(5, 5);
}

Boolesche Assertions

EXPECT_TRUE und EXPECT_FALSE überprüfen boolesche Bedingungen direkt.

#include <gtest/gtest.h>

bool is_even(int n) { return n % 2 == 0; }

TEST(Bool, Even) {
    EXPECT_TRUE(is_even(4));
    EXPECT_FALSE(is_even(3));
}

Gleitkomma-Vergleiche

Verwenden Sie EXPECT_EQ niemals mit Gleitkommazahlen. Verwenden Sie stattdessen EXPECT_FLOAT_EQ, EXPECT_DOUBLE_EQ oder EXPECT_NEAR mit einer Toleranz.

#include <gtest/gtest.h>

TEST(Floats, Approx) {
    EXPECT_DOUBLE_EQ(0.1 + 0.2, 0.3);
    EXPECT_NEAR(3.14159, 3.14, 0.01);
}

String-Assertions

Verwenden Sie für C-Strings EXPECT_STREQ / EXPECT_STRNE. Für std::string funktioniert EXPECT_EQ, da dabei nach Wert verglichen wird.

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

TEST(Strings, Compare) {
    EXPECT_STREQ("hi", "hi");
    EXPECT_EQ(std::string("ok"), "ok");
}

Assertions für Ausnahmen

Überprüfen Sie, ob der Code die erwartete Ausnahme auslöst.

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

void check(int n) {
    if (n < 0) throw std::runtime_error("neg");
}

TEST(Throws, Negative) {
    EXPECT_THROW(check(-1), std::runtime_error);
    EXPECT_NO_THROW(check(1));
}

Benutzerdefinierte Fehlermeldungen

Fügen Sie einer Assertion mit << zusätzlichen Kontext hinzu, damit sich Fehler leichter diagnostizieren lassen.

#include <gtest/gtest.h>

TEST(Message, WithContext) {
    int x = 7;
    EXPECT_EQ(x, 7) << "x had unexpected value " << x;
}

GMock-Matcher mit EXPECT_THAT

EXPECT_THAT kombiniert einen Wert mit einem Matcher für ausdrucksstarke Überprüfungen, zum Beispiel EXPECT_THAT(v, ElementsAre(1, 2, 3)).

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
using ::testing::ElementsAre;

TEST(Matchers, Vector) {
    std::vector<int> v{1, 2, 3};
    EXPECT_THAT(v, ElementsAre(1, 2, 3));
}

Nützliche Matcher

Zu den häufig verwendeten Matchern gehören:

  • Eq, Ne, Gt, Lt
  • Contains, ElementsAre, UnorderedElementsAre
  • HasSubstr, StartsWith, EndsWith

Die richtige Assertion auswählen

Bevorzugen Sie die spezifischste Assertion: Sie erzeugt klarere Fehlermeldungen als ein allgemeines EXPECT_TRUE. EXPECT_EQ(a, b) gibt beide Werte aus, EXPECT_TRUE(a == b) dagegen nicht.

Kurze Überprüfung

Rufen Sie sich den Unterschied zwischen EXPECT und ASSERT in Erinnerung.

Zusammenfassung

Sie haben GTest-Assertions kennengelernt.

  • EXPECT_* setzt den Test fort; ASSERT_* bricht ihn ab
  • Makros für Vergleiche, boolesche Werte, Gleitkommazahlen, Strings und Ausnahmen
  • Fügen Sie mit << zusätzlichen Kontext hinzu
  • EXPECT_THAT und Matcher für ausdrucksstarke Überprüfungen

Häufig gestellte Fragen

Ist die Lektion „Assertions und Matcher“ kostenlos?

Ja — der vollständige Text von „Assertions und Matcher“ 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 „Assertions und Matcher“?

Ausdrucksstarke Prüfungen schreiben 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 2 von 4.

Wie lange dauert die Lektion „Assertions und Matcher“?

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