💎 Lehrpfad 4: Fearless Concurrency & Systems Master

Rust 15: Automatisierte Tests mit cargo test

Professionelle Testsuites in Rust: Unit Tests im #[cfg(test)]-Modul, Assertions (assert_eq!), #[should_panic] und Integrationstests.

📂 Dateien dieser Lerneinheit:
📄 aufgabe.rs (Startercode) 🧪 test_aufgabe.rs (Tests) 💡 musterloesung.rs (Lösung) 📖 README.md

💡 1. Test-Driven Development mit Cargo

Cargo bringt ein integriertes Testframework mit. Tests liegen direkt in derselben Datei im Testmodul und haben Zugriff auf private Felder:

pub fn dividiere(a: f64, b: f64) -> Result {
    if b == 0.0 {
        Err("Division durch Null!".to_string())
    } else {
        Ok(a / b)
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_erfolgreiche_division() {
        assert_eq!(dividiere(10.0, 2.0).unwrap(), 5.0);
    }

    #[test]
    fn test_fehler_bei_null() {
        assert!(dividiere(10.0, 0.0).is_err());
    }
}
🔬 Didaktische Analogie: Das Qualitätszertifikat

Ein Testlauf mit `cargo test` ist wie der TÜV beim Auto: Bremse, Licht und Motor werden vollautomatisch parallel durchgetestet, bevor das Fahrzeug auf die Straße darf!

⚡ 2. Quick-Cheat-Sheet

Makro / AttributZweckBeispiel
#[test]Markiert Funktion als TestfallWird von `cargo test` aufgerufen
assert_eq!(a, b)Prüft auf GleichheitGibt bei Fehlschlag beide Werte aus
assert!(bed)Prüft WahrheitswertSchlägt fehl, wenn bed false ist
#[should_panic]Erwartet PanikTest besteht nur, wenn Code panikt

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

⚠️ Tests laufen standardmäßig parallel

Wenn Tests auf dieselbe Datenbank oder Datei zugreifen, kollidieren sie! Nutze cargo test -- --test-threads=1 für serielle Ausführung.

⚠️ Fehlendes use super::*

Im Modul mod tests hat man standardmäßig keinen Zugriff auf die Funktionen der Datei, wenn use super::*; fehlt!

🧠 4. Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Ownership, Borrowing und Speichersicherheit, bevor du den Code in der Web-IDE schreibst.

🎯 5. Aufgaben & Checkliste in aufgabe.rs

💻 In Web-IDE öffnen & lösen →