Probar errores y panics en Rust
Las pruebas pueden devolver Result, y should_panic afirma la falla que esperas.
fn stars(value: i32) -> Result<u8, String> {
if (0..=3).contains(&value) {
Ok(value as u8)
} else {
panic!("stars out of range: {value}");
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_a_number() -> Result<(), std::num::ParseIntError> {
let n: i32 = "3".parse()?;
assert_eq!(stars(n).unwrap(), 3);
Ok(())
}
#[test]
#[should_panic(expected = "out of range")]
fn rejects_too_many_stars() {
stars(9).unwrap();
}
}
fn main() {
println!("{:?}", stars(2));
}
Cómo funciona
- Una prueba que devuelve
Resultte deja usar?adentro. #[should_panic(expected = ...)]coincide con el mensaje.#[ignore]estaciona una prueba lenta hasta que la pidas.
Palabras clave y builtins usados aquí
OkResultStringaselsefni32ifletmodsuperu8use
El intento, en números
- Líneas
- 29
- Caracteres a escribir
- 471
- Tokens
- 156
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 89 segundos.
Paso 2 de 3 en Pruebas y documentación; paso 5 de 12 en Módulos, pruebas y macros.