Les proves són una part essencial del desenvolupament de programari, ja que asseguren que el codi funcioni com s'espera i ajuden a detectar errors abans que el programari arribi als usuaris finals. En aquest tema, aprendrem com escriure i executar proves en Rust.
Continguts
Introducció a les Proves en Rust
Rust proporciona un conjunt d'eines integrades per escriure i executar proves. Aquestes eines estan dissenyades per ser fàcils d'utilitzar i permeten als desenvolupadors assegurar-se que el seu codi funcioni correctament.
Tipus de Proves
- Proves Unitàries: Verifiquen el funcionament de funcions o mòduls individuals.
- Proves d'Integració: Verifiquen que diferents parts del sistema funcionin correctament quan es combinen.
Proves Bàsiques
Les proves unitàries es defineixen dins del mateix fitxer de codi que la funcionalitat que estan provant. Utilitzen el mòdul #[cfg(test)]
i la macro #[test]
.
Exemple de Prova Unitària
// funcions.rs pub fn suma(a: i32, b: i32) -> i32 { a + b } #[cfg(test)] mod tests { use super::*; #[test] fn test_suma() { assert_eq!(suma(2, 2), 4); } }
Explicació:
#[cfg(test)]
: Indica que el mòdul només s'inclourà quan es facin proves.#[test]
: Marca una funció com a prova.assert_eq!
: Comprova que dos valors siguin iguals.
Proves d'Integració
Les proves d'integració es col·loquen en el directori tests
a l'arrel del projecte. Cada fitxer dins d'aquest directori es tracta com un mòdul separat.
Exemple de Prova d'Integració
// tests/integracio.rs extern crate el_meu_crat; use el_meu_crat::suma; #[test] fn test_suma_integration() { assert_eq!(suma(2, 3), 5); }
Explicació:
extern crate el_meu_crat;
: Importa el crat principal.use el_meu_crat::suma;
: Importa la funciósuma
per provar-la.
Macros de Prova
Rust proporciona diverses macros per ajudar en les proves:
assert!
: Comprova que una condició sigui certa.assert_eq!
: Comprova que dos valors siguin iguals.assert_ne!
: Comprova que dos valors no siguin iguals.panic!
: Força un error.
Exemple d'Ús de Macros
#[test] fn test_macros() { let x = 5; let y = 10; assert!(x < y); assert_eq!(x + y, 15); assert_ne!(x, y); }
Execució de Proves
Per executar les proves, utilitza la comanda cargo test
. Aquesta comanda compilarà el projecte i executarà totes les proves definides.
Exemple d'Execució de Proves
Sortida Esperada:
running 2 tests test tests::test_suma ... ok test tests::test_macros ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Exercicis Pràctics
Exercici 1: Escriure una Prova Unitària
Escriu una funció multiplica
que multipliqui dos nombres enters i una prova unitària per verificar el seu funcionament.
// funcions.rs pub fn multiplica(a: i32, b: i32) -> i32 { a * b } #[cfg(test)] mod tests { use super::*; #[test] fn test_multiplica() { assert_eq!(multiplica(3, 4), 12); } }
Exercici 2: Escriure una Prova d'Integració
Crea un fitxer de prova d'integració que verifiqui la funció multiplica
.
// tests/integracio.rs extern crate el_meu_crat; use el_meu_crat::multiplica; #[test] fn test_multiplica_integration() { assert_eq!(multiplica(3, 4), 12); }
Conclusió
En aquesta secció, hem après com escriure i executar proves en Rust. Les proves són una part crucial del desenvolupament de programari, ja que ajuden a assegurar que el codi funcioni correctament i a detectar errors abans que el programari arribi als usuaris finals. Hem vist com escriure proves unitàries i d'integració, així com utilitzar diverses macros de prova. A més, hem practicat aquests conceptes amb exercicis pràctics. En el següent tema, explorarem com documentar el nostre codi en Rust.