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

$ cargo test

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.

© Copyright 2024. Tots els drets reservats