Ich habe die folgende Methode und den folgenden Komponententest implementiert:
use std::fs::File;
use std::path::Path;
use std::io::prelude::*;
fn read_file(path: &Path) {
let mut file = File::open(path).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
println!("{}", contents);
}
#[test]
fn test_read_file() {
let path = &Path::new("/etc/hosts");
println!("{:?}", path);
read_file(path);
}
Ich führe den Unit-Test folgendermaßen aus:
rustc --test app.rs; ./app
Ich könnte das auch mit laufen lassen
cargo test
Ich erhalte eine Nachricht zurück, dass der Test bestanden wurde, der println!
jedoch nie auf dem Bildschirm angezeigt wird. Warum nicht?
--nocapture
Option an übergeben wurdecargo test
, aber die Fracht erkennt diese Flagge für mich nicht (unter Verwendung der neuesten Nacht von rustup.sh). Bist du sicher, dass es funktionieren sollte?cargo test -- --nocapture
, es sollte funktionieren.cargo test [--] --bench
zur Arbeit komme !nocapture
, nichtno-capture
.TL; DR
Mit folgendem Code:
Führen Sie dann Folgendes aus:
Und du solltest sehen
quelle
cargo test -- --no-capture
funktioniert nicht mehr. Ich erhalte die folgende Fehlermeldung:thread '<main>' panicked at '"Unrecognized option: \'no-capture\'."', ../src/libtest/lib.rs:249
--nocapture
nicht der Fall--no-capture
. Dies ist jedoch ein völlig offensichtlicher Fehler bei den meisten Befehlszeilenkonventionen, auf die wir stoßen. Ich habe diese Option genau so verwendet, wie in dieser Antwort in Rost 1.1 (Fracht 0.2.0) beschrieben, und sie hat genau wie angegeben funktioniert.println!()
Verwenden Sie die Flagscolor
undnocapture
in, um Ausdrucke mit den Testergebnissen einzuschließen und Farben für diese beizubehaltencargo test
.(Frachtversion: 0.13.0 pro Nacht)
quelle
Während des Tests wird die Standardausgabe nicht angezeigt. Nicht - Textnachricht zum Testen verwenden , aber
assert!
,assert_eq!
undfail!
stattdessen. Das Unit-Test-System von Rust kann diese, aber keine Textnachrichten verstehen.Der von Ihnen geschriebene Test besteht auch dann, wenn etwas schief geht. Mal sehen warum:
read_to_end
Die Unterschrift istfn read_to_end(&mut self) -> IoResult<Vec<u8>>
Es wird ein zurückgegeben
IoResult
, um Erfolg oder Fehler anzuzeigen. Dies ist nur ein Typ def für a,Result
dessen Fehlerwert ein istIoError
. Es liegt an Ihnen, zu entscheiden, wie ein Fehler behandelt werden soll. In diesem Fall möchten wir, dass die Aufgabe fehlschlägt. Dies erfolgt durch Aufrufenunwrap
vonResult
.Das wird funktionieren:
unwrap
sollte aber nicht überbeansprucht werden.quelle