Les proves unitàries són una part essencial del desenvolupament de programari, ja que permeten verificar que les diferents parts del codi funcionen correctament de manera independent. En aquest tema, aprendrem com crear i executar proves unitàries a Xcode utilitzant el framework XCTest.

Objectius del Tema

  • Entendre què són les proves unitàries i per què són importants.
  • Aprendre a configurar un projecte Xcode per a proves unitàries.
  • Escriure i executar proves unitàries bàsiques.
  • Utilitzar assertions per validar el comportament del codi.
  • Conèixer les millors pràctiques per escriure proves unitàries efectives.

Què són les Proves Unitàries?

Les proves unitàries són tests automàtics que verifiquen el funcionament d'una unitat de codi, com ara una funció o un mètode. Aquestes proves ajuden a assegurar que el codi compleix amb les especificacions i que els canvis futurs no introdueixen errors.

Beneficis de les Proves Unitàries

  • Detecció Primerenca d'Errors: Identifiquen errors en fases inicials del desenvolupament.
  • Facilitat de Refactorització: Permeten canviar el codi amb confiança, sabent que les proves validaran el comportament.
  • Documentació del Codi: Les proves poden servir com a documentació viva del comportament esperat del codi.

Configurant un Projecte Xcode per a Proves Unitàries

Quan crees un nou projecte a Xcode, pots incloure un target de proves unitàries. Si no ho vas fer inicialment, pots afegir-lo més tard.

Passos per Afegir un Target de Proves Unitàries

  1. Crear un Nou Projecte amb Proves Unitàries:

    • A l'assistent de creació de projectes, assegura't de seleccionar l'opció "Include Unit Tests".
  2. Afegir un Target de Proves Unitàries a un Projecte Existents:

    • Ves a File > New > Target.
    • Selecciona iOS Unit Testing Bundle o macOS Unit Testing Bundle segons el teu projecte.
    • Fes clic a Next i segueix les instruccions per afegir el target.

Escriure i Executar Proves Unitàries

Exemple de Prova Unitària

Suposem que tenim una funció que suma dos números:

func add(_ a: Int, _ b: Int) -> Int {
    return a + b
}

Podem escriure una prova unitària per verificar que aquesta funció funciona correctament.

Creant una Prova Unitària

  1. Crear una Nova Classe de Proves:

    • A la carpeta de proves del teu projecte, crea un nou fitxer Swift i anomena'l MathTests.swift.
  2. Importar XCTest i Definir la Classe de Proves:

    import XCTest
    @testable import ElTeuProjecte
    
    class MathTests: XCTestCase {
        func testAdd() {
            let result = add(2, 3)
            XCTAssertEqual(result, 5, "La funció add hauria de retornar 5 per a 2 + 3")
        }
    }
    
  3. Executar les Proves:

    • Selecciona Product > Test o utilitza la drecera de teclat Cmd + U.

Assertions

Les assertions són expressions que verifiquen que una condició és certa. Si la condició és falsa, la prova falla.

Assertions Comunes

  • XCTAssertEqual: Verifica que dos valors són iguals.
  • XCTAssertTrue: Verifica que una condició és certa.
  • XCTAssertFalse: Verifica que una condició és falsa.
  • XCTAssertNil: Verifica que un valor és nil.
  • XCTAssertNotNil: Verifica que un valor no és nil.

Exemple d'Assertions

func testAssertions() {
    let value = 10
    XCTAssertEqual(value, 10, "El valor hauria de ser 10")
    XCTAssertTrue(value > 5, "El valor hauria de ser major que 5")
    XCTAssertFalse(value < 5, "El valor no hauria de ser menor que 5")
    XCTAssertNotNil(value, "El valor no hauria de ser nil")
}

Millors Pràctiques per Escriure Proves Unitàries

  • Només Provar una Unitat de Codi: Cada prova hauria de verificar una única funcionalitat.
  • Utilitzar Noms Descriptius: Els noms de les proves haurien de descriure clarament què estan provant.
  • Evitar la Dependència entre Proves: Les proves haurien de ser independents entre elles.
  • Mantenir les Proves Simples i Curtes: Les proves haurien de ser fàcils de llegir i entendre.

Exercici Pràctic

Exercici

Escriu una funció que calculi el factorial d'un nombre i crea una prova unitària per verificar el seu funcionament.

func factorial(_ n: Int) -> Int {
    if n == 0 {
        return 1
    } else {
        return n * factorial(n - 1)
    }
}

Prova Unitària

class MathTests: XCTestCase {
    func testFactorial() {
        XCTAssertEqual(factorial(0), 1, "El factorial de 0 hauria de ser 1")
        XCTAssertEqual(factorial(1), 1, "El factorial de 1 hauria de ser 1")
        XCTAssertEqual(factorial(5), 120, "El factorial de 5 hauria de ser 120")
    }
}

Conclusió

Les proves unitàries són una eina poderosa per assegurar la qualitat del codi. En aquest tema, hem après a configurar un projecte Xcode per a proves unitàries, escriure i executar proves bàsiques, i utilitzar assertions per validar el comportament del codi. També hem vist algunes millors pràctiques per escriure proves unitàries efectives. Amb aquestes habilitats, estaràs millor preparat per desenvolupar aplicacions robustes i fiables.

© Copyright 2024. Tots els drets reservats