🧪 Software-Qualität & Testing

C++ 15: GoogleTest (gtest) & Assertions

Industriestandard für C++ Unittests: Das GoogleTest (gtest) Framework, Non-Fatal Checks (EXPECT_*) vs. Fatale Abbruchbedingungen (ASSERT_*) und Test-Fixtures.

🧪 1. Automatisierte Qualitätssicherung mit GoogleTest

Modernes Systems Engineering verlangt automatisierte Regressionstests bei jedem Build. GoogleTest (gtest) ist das weltweit dominierende C++ Testframework. Es registriert Tests automatisch über Makros (TEST), formatiert Ausgaben farbig und unterscheidet präzise zwischen weichen Überprüfungen (EXPECT) und harten Vorbedingungen (ASSERT).

🔍 Didaktische Analogie: Qualitätskontrolle am Fließband

EXPECT_EQ: Prüft die Lackfarbe des Autos. Weicht sie ab, notiert der Prüfer einen Mangel, prüft das Auto aber weiter auf Bremsen und Motor. ASSERT_NE: Prüft, ob überhaupt vier Räder montiert sind. Fehlt ein Rad, bricht der Prüfer sofort ab, da eine Weiterfahrt zum Crash führen würde.

⚡ 2. C / C++ Quick-Cheat-Sheet

Syntax / Anweisung Bedeutung & Funktion
TEST(Suite, Name) { ... }Definiert einen isolierten Unittest-Fall.
EXPECT_EQ(val1, val2);Prüft Gleichheit; Test läuft bei Fehler weiter.
ASSERT_TRUE(condition);Fatale Prüfung; bricht Testfunktion bei False sofort ab.
EXPECT_THROW(expr, ExceptionType);Verifiziert, dass Code eine erwartete Exception wirft.

⚠️ 3. Häufige Stolperfallen & Anti-Patterns

⚠️ ASSERT_* außerhalb von void-Funktionen

Da ASSERT_* im Fehlerfall ein einfaches return; ohne Wert ausführt, führt sein Einsatz in Funktionen mit Rückgabetyp (z.B. int) zu einem Compilerfehler!

⚠️ Nutzung von == innerhalb von ASSERT_TRUE

Schreibe nicht ASSERT_TRUE(a == b), sondern ASSERT_EQ(a, b)! Bei einem Fehler gibt ASSERT_EQ die tatsächlichen Werte von a und b aus, während ASSERT_TRUE nur nutzloses 'Value of: a == b, Actual: false' liefert.

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis zu Speichersicherheit, Syntax und Systems-Design mit gezieltem Feedback:

🎯 Aufgaben & Checkliste

💻 In Web-IDE öffnen → ← C++ 14 C++ 16 →