Pruebas en Rust desde cero: cómo no volverse loco y escribir tu primera prueba

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué las pruebas en Rust no dan miedo, sino que son interesantes?

\n\n

Cuando empiezas a aprender Rust, parece que el compilador ya hace todo el trabajo sucio por ti. Verifica la memoria, controla los préstamos y no te deja dispararte en el pie. Pero incluso el compilador más estricto no sabe verificar la lógica del programa. Aquí es donde las pruebas vienen al rescate.

\n\n

Muchos principiantes temen las pruebas. Les parece que es una pérdida de tiempo, que hay que escribir un montón de código aburrido. Pero en realidad, las pruebas son tu seguro. Te ayudan a encontrar errores más rápido, refactorizar código con confianza y dormir tranquilo después del lanzamiento.

\n\n

En este artículo, veremos por dónde empezar con las pruebas en Rust si eres principiante. Sin rodeos: solo práctica, ejemplos reales y consejos que te serán útiles en proyectos reales.

\n\n

¿Qué necesitas saber antes de empezar?

\n\n

Antes de escribir pruebas, asegúrate de tener Rust instalado. Si no es así, abre la terminal y ejecuta:

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

Todo lo que necesitamos ya está integrado en el ecosistema. No es necesario instalar frameworks adicionales. Rust ofrece un potente ejecutor de pruebas integrado que se inicia con un solo comando.

\n\n

Creemos un nuevo proyecto para experimentar:

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

¡Perfecto! Ahora tenemos un proyecto limpio en el que aprenderemos a escribir pruebas.

\n\n

Primera prueba: analicemos con un ejemplo

\n\n

Abre el archivo src/lib.rs. Por defecto está vacío, pero añadiremos una función simple y una prueba para ella.

\n\n

Escribamos una función que verifique si un número es par:

\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

Analicemos el código por partes:

\n\n
    \n
  • #[cfg(test)] — este atributo le dice al compilador: "Compila este módulo solo al ejecutar las pruebas". No se incluirá en la compilación final.
  • \n
  • mod tests — creamos un módulo para las pruebas. Es una práctica estándar.
  • \n
  • use super::*; — importamos todo lo declarado arriba para que nuestra función is_even sea visible.
  • \n
  • #[test] — marcador que convierte una función normal en una prueba.
  • \n
  • assert_eq! — macro que verifica la igualdad de dos valores. Si no son iguales, la prueba falla.
  • \n
\n\n

Ejecutamos la prueba con el comando:

\n\n
cargo test
\n\n

Si todo está correcto, verás una salida verde:

\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

¡Felicidades, has escrito tu primera prueba en Rust! Ahora veamos cómo escribir verificaciones más significativas.

\n\n

Macros principales para pruebas

\n\n

En las pruebas usarás constantemente tres macros. Recuérdalos:

\n\n
    \n
  • assert!(expression) — verifica que la expresión sea verdadera. Si es falsa, la prueba falla.
  • \n
  • assert_eq!(left, right) — verifica la igualdad de dos valores. Útil para comparar resultados.
  • \n
  • assert_ne!(left, right) — verifica que los valores no sean iguales.
  • \n
\n\n

Ejemplo de uso de las tres macros:

\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

Ten en cuenta: assert! acepta una expresión booleana, y

Blogs

Book Recommendations