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 fortgesetztASSERT_*: 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_NEEXPECT_LT,EXPECT_LEEXPECT_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,LtContains,ElementsAre,UnorderedElementsAreHasSubstr,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_THATund 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
- GTest einrichten
- Assertions und Matcher
- Fixtures und Setup
- Mocking mit GMock