Warum Testing in Rust nicht schwer, sondern spannend ist
\n\nWenn 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\nViele 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\nIn 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\nWas du vor dem Start wissen solltest
\n\nBevor du Tests schreibst, stelle sicher, dass Rust installiert ist. Falls nicht, öffne ein Terminal und führe folgenden Befehl aus:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nAlles, 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\nErstellen wir ein neues Projekt für unsere Experimente:
\n\ncargo new rust_test_guide\ncd rust_test_guide\n\nPerfekt! Jetzt haben wir ein sauberes Projekt, in dem wir lernen, Tests zu schreiben.
\n\nDer 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.
Schreiben wir eine Funktion, die prüft, ob eine Zahl gerade ist:
\n\npub 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\nLass 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 Funktionis_evensehen 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
Starte den Test mit folgendem Befehl:
\n\ncargo test\n\nWenn alles richtig ist, siehst du eine grüne Ausgabe:
\n\nrunning 1 test\ntest tests::test_is_even ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\n\nHerzlichen Glückwunsch, du hast deinen ersten Test in Rust geschrieben! Jetzt schauen wir uns an, wie du sinnvollere Überprüfungen schreibst.
\n\nDie wichtigsten Makros fürs Testing
\n\nIn 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
Ein Beispiel für die Verwendung aller drei Makros:
\n\npub 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\nBeachte: assert! akzeptiert einen booleschen Ausdruck, während