Rust-Testing von Grund auf: Erste Tests schreiben leicht gemacht

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Testing in Rust nicht schwer, sondern spannend ist

\n\n

Wenn du gerade anfängst, Rust zu lernen, hast du vielleicht das Gefühl, dass der Compiler bereits die ganze Drecksarbeit für dich erledigt. Er prüft den Speicher, überwacht Ausleihen und lässt dich nicht ins offene Messer laufen. Aber selbst der strengste Compiler kann nicht die Programmlogik überprüfen. Genau hier kommt das Testing ins Spiel.

\n\n

Viele Anfänger haben Angst vor Tests. Sie denken, es sei Zeitverschwendung und man müsse jede Menge langweiligen Code schreiben. Doch in Wirklichkeit sind Tests deine Versicherung. Sie helfen dir, Bugs schneller zu finden, Code sicher zu refaktorieren und nach dem Release ruhig zu schlafen.

\n\n

In diesem Artikel schauen wir uns an, wie du als Anfänger mit dem Testen in Rust beginnen kannst. Kein unnötiges Blabla – nur Praxis, lebendige Beispiele und Tipps, die du in echten Projekten brauchst.

\n\n

Was du vor dem Start wissen solltest

\n\n

Bevor du Tests schreibst, stelle sicher, dass Rust installiert ist. Falls nicht, öffne ein Terminal und führe folgenden Befehl aus:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Alles, was wir brauchen, ist bereits in der Ökosystem integriert. Du musst keine zusätzlichen Frameworks installieren. Rust bietet einen leistungsstarken integrierten Test-Runner, der mit einem einzigen Befehl gestartet wird.

\n\n

Erstellen wir ein neues Projekt für unsere Experimente:

\n\n
cargo new rust_test_guide\ncd rust_test_guide
\n\n

Perfekt! Jetzt haben wir ein sauberes Projekt, in dem wir lernen, Tests zu schreiben.

\n\n

Der erste Test: Schritt für Schritt erklärt

\n\n

Öffne die Datei src/lib.rs. Standardmäßig ist sie leer, aber wir fügen eine einfache Funktion und einen dazugehörigen Test hinzu.

\n\n

Schreiben wir eine Funktion, die prüft, ob eine Zahl gerade ist:

\n\n
pub fn is_even(num: i32) -> bool {\n    num % 2 == 0\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_is_even() {\n        assert_eq!(is_even(4), true);\n        assert_eq!(is_even(7), false);\n    }\n}
\n\n

Lass uns den Code Schritt für Schritt durchgehen:

\n\n
    \n
  • #[cfg(test)] – dieses Attribut sagt dem Compiler: „Baue dieses Modul nur, wenn Tests ausgeführt werden.“ Es landet nicht im finalen Build.
  • \n
  • mod tests – wir erstellen ein Modul für die Tests. Das ist die Standardpraxis.
  • \n
  • use super::*; – importiert alles, was darüber deklariert wurde, damit wir unsere Funktion is_even sehen können.
  • \n
  • #[test] – ein Marker, der eine normale Funktion in einen Test verwandelt.
  • \n
  • assert_eq! – ein Makro, das die Gleichheit zweier Werte prüft. Sind sie nicht gleich, schlägt der Test fehl.
  • \n
\n\n

Starte den Test mit folgendem Befehl:

\n\n
cargo test
\n\n

Wenn alles richtig ist, siehst du eine grüne Ausgabe:

\n\n
running 1 test\ntest tests::test_is_even ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
\n\n

Herzlichen Glückwunsch, du hast deinen ersten Test in Rust geschrieben! Jetzt schauen wir uns an, wie du sinnvollere Überprüfungen schreibst.

\n\n

Die wichtigsten Makros fürs Testing

\n\n

In Tests wirst du ständig drei Makros verwenden. Merke sie dir:

\n\n
    \n
  • assert!(expression) – prüft, ob ein Ausdruck wahr ist. Ist er falsch, schlägt der Test fehl.
  • \n
  • assert_eq!(left, right) – prüft die Gleichheit zweier Werte. Praktisch zum Vergleichen von Ergebnissen.
  • \n
  • assert_ne!(left, right) – prüft, dass die Werte nicht gleich sind.
  • \n
\n\n

Ein Beispiel für die Verwendung aller drei Makros:

\n\n
pub fn add_two(x: i32) -> i32 {\n    x + 2\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_add_two() {\n        assert!(add_two(3) == 5);\n        assert_eq!(add_two(0), 2);\n        assert_ne!(add_two(10), 13);\n    }\n}
\n\n

Beachte: assert! akzeptiert einen booleschen Ausdruck, während

Blogs

Buchempfehlungen