¿Por qué las pruebas en Rust no dan miedo, sino que son interesantes?
\n\nCuando 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\nMuchos 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\nEn 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\nAntes de escribir pruebas, asegúrate de tener Rust instalado. Si no es así, abre la terminal y ejecuta:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nTodo 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\nCreemos un nuevo proyecto para experimentar:
\n\ncargo new rust_test_guide\ncd rust_test_guide\n\n¡Perfecto! Ahora tenemos un proyecto limpio en el que aprenderemos a escribir pruebas.
\n\nPrimera prueba: analicemos con un ejemplo
\n\nAbre el archivo src/lib.rs. Por defecto está vacío, pero añadiremos una función simple y una prueba para ella.
Escribamos una función que verifique si un número es par:
\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\nAnalicemos 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ónis_evensea 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
Ejecutamos la prueba con el comando:
\n\ncargo test\n\nSi todo está correcto, verás una salida verde:
\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\n¡Felicidades, has escrito tu primera prueba en Rust! Ahora veamos cómo escribir verificaciones más significativas.
\n\nMacros principales para pruebas
\n\nEn 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
Ejemplo de uso de las tres macros:
\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\nTen en cuenta: assert! acepta una expresión booleana, y