He implementado el siguiente método y prueba unitaria:
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);
}
Ejecuto la prueba de la unidad de esta manera:
rustc --test app.rs; ./app
También podría ejecutar esto con
cargo test
Recibo un mensaje que dice que la prueba pasó pero println!que nunca se muestra en la pantalla. Por qué no?

--nocaptureopción acargo test, pero la carga no reconoce esta bandera para mí (usando la última noche de rustup.sh). ¿Estás seguro de que debería funcionar?cargo test -- --nocapture, debería funcionar.cargo test [--] --benchal trabajo también!nocapture, nono-capture.TL; DR
Con el siguiente código:
Luego ejecute lo siguiente:
Y deberías ver
fuente
cargo test -- --no-captureYa no funciona. Me sale el siguiente error:thread '<main>' panicked at '"Unrecognized option: \'no-capture\'."', ../src/libtest/lib.rs:249--nocaptureno--no-capture. Sin embargo, es un error completamente obvio cometer la mayoría de las convenciones de línea de comandos que tendemos a encontrar. Acabo de utilizar esta opción exactamente como se describe en esta respuesta en rust 1.1 (carga 0.2.0) y funcionó exactamente como se anuncia.Para incluir impresiones con
println!()y mantener colores para los resultados de la prueba, use las banderascolory .nocapturecargo test(versión de carga: 0.13.0 por noche)
fuente
Durante la prueba, no se muestra la salida estándar. No utilizar mensajes de texto para probar, pero
assert!,assert_eq!yfail!en su lugar. El sistema de prueba de la unidad de Rust puede entender esto pero no mensajes de texto.La prueba que ha escrito pasará incluso si algo sale mal. Veamos por qué:
read_to_endla firma esfn read_to_end(&mut self) -> IoResult<Vec<u8>>Devuelve un
IoResultpara indicar éxito o error. Esto es solo un tipo def para unResultcuyo valor de error es unIoError. Depende de usted decidir cómo se debe manejar un error. En este caso, queremos que la tarea falle, lo que se hace llamandounwrapalResult.Esto funcionará:
unwrapSin embargo, no se debe usar en exceso.fuente