Les proves unitàries són una part fonamental 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 en Objective-C utilitzant el framework XCTest.

Objectius del Tema

  • Entendre la importància de les proves unitàries.
  • Configurar un projecte per a les proves unitàries.
  • Escriure i executar proves unitàries amb XCTest.
  • Analitzar els resultats de les proves i corregir errors.

Importància de les Proves Unitàries

Les proves unitàries ofereixen diversos avantatges:

  • Detecció Primerenca d'Errors: Permeten identificar errors en el codi abans que es converteixin en problemes més grans.
  • Facilitat de Manteniment: Faciliten la refactorització del codi, ja que les proves asseguren que els canvis no introdueixin nous errors.
  • Documentació: Les proves unitàries poden servir com a documentació del comportament esperat del codi.

Configuració del Projecte per a les Proves Unitàries

Abans de començar a escriure proves unitàries, hem de configurar el nostre projecte per suportar-les.

Passos per Configurar el Projecte

  1. Crear un Nou Projecte:

    • Obre Xcode i crea un nou projecte.
    • Assegura't de seleccionar l'opció "Include Unit Tests" durant la creació del projecte.
  2. Estructura del Projecte:

    • Xcode crearà automàticament una carpeta per a les proves unitàries amb un fitxer de prova inicial.

Escriure Proves Unitàries amb XCTest

XCTest és el framework de proves unitàries d'Apple per a Objective-C i Swift. Proporciona una sèrie de classes i mètodes per crear i executar proves.

Exemple de Prova Unitària

A continuació, es mostra un exemple de com escriure una prova unitària bàsica.

Classe a Provar

// Calculator.h
#import <Foundation/Foundation.h>

@interface Calculator : NSObject

- (NSInteger)add:(NSInteger)a to:(NSInteger)b;
- (NSInteger)subtract:(NSInteger)a from:(NSInteger)b;

@end

// Calculator.m
#import "Calculator.h"

@implementation Calculator

- (NSInteger)add:(NSInteger)a to:(NSInteger)b {
    return a + b;
}

- (NSInteger)subtract:(NSInteger)a from:(NSInteger)b {
    return b - a;
}

@end

Prova Unitària

// CalculatorTests.m
#import <XCTest/XCTest.h>
#import "Calculator.h"

@interface CalculatorTests : XCTestCase

@property (nonatomic, strong) Calculator *calculator;

@end

@implementation CalculatorTests

- (void)setUp {
    [super setUp];
    self.calculator = [[Calculator alloc] init];
}

- (void)tearDown {
    self.calculator = nil;
    [super tearDown];
}

- (void)testAddition {
    NSInteger result = [self.calculator add:2 to:3];
    XCTAssertEqual(result, 5, @"Expected 2 + 3 to equal 5");
}

- (void)testSubtraction {
    NSInteger result = [self.calculator subtract:2 from:5];
    XCTAssertEqual(result, 3, @"Expected 5 - 2 to equal 3");
}

@end

Explicació del Codi

  • setUp: Aquest mètode s'executa abans de cada prova. Aquí inicialitzem l'objecte Calculator.
  • tearDown: Aquest mètode s'executa després de cada prova. Aquí alliberem l'objecte Calculator.
  • testAddition: Aquesta prova verifica que el mètode add:to: funciona correctament.
  • testSubtraction: Aquesta prova verifica que el mètode subtract:from: funciona correctament.

Executar les Proves Unitàries

Per executar les proves unitàries:

  1. Selecciona el menú "Product" a Xcode.
  2. Fes clic a "Test" o utilitza la drecera de teclat Cmd + U.

Xcode executarà totes les proves i mostrarà els resultats a la consola.

Analitzar els Resultats de les Proves

Després d'executar les proves, Xcode mostrarà els resultats:

  • Proves Passades: Les proves que han passat es mostren amb una marca verda.
  • Proves Fallides: Les proves que han fallat es mostren amb una marca vermella i un missatge d'error.

Exercicis Pràctics

Exercici 1: Prova de Multiplicació

Crea una nova funció multiply:by: a la classe Calculator i escriu una prova unitària per verificar el seu funcionament.

Solució

// Calculator.m
- (NSInteger)multiply:(NSInteger)a by:(NSInteger)b {
    return a * b;
}

// CalculatorTests.m
- (void)testMultiplication {
    NSInteger result = [self.calculator multiply:2 by:3];
    XCTAssertEqual(result, 6, @"Expected 2 * 3 to equal 6");
}

Exercici 2: Prova de Divisió

Crea una nova funció divide:by: a la classe Calculator i escriu una prova unitària per verificar el seu funcionament. Assegura't de gestionar la divisió per zero.

Solució

// Calculator.m
- (NSInteger)divide:(NSInteger)a by:(NSInteger)b {
    if (b == 0) {
        return NSNotFound; // O qualsevol altre valor que indiqui error
    }
    return a / b;
}

// CalculatorTests.m
- (void)testDivision {
    NSInteger result = [self.calculator divide:6 by:3];
    XCTAssertEqual(result, 2, @"Expected 6 / 3 to equal 2");
    
    result = [self.calculator divide:6 by:0];
    XCTAssertEqual(result, NSNotFound, @"Expected division by zero to return NSNotFound");
}

Resum

En aquest tema, hem après la importància de les proves unitàries i com configurar un projecte per a les proves unitàries en Objective-C. Hem escrit i executat proves unitàries utilitzant XCTest i hem analitzat els resultats de les proves. També hem realitzat exercicis pràctics per reforçar els conceptes apresos. Les proves unitàries són una eina essencial per assegurar la qualitat i la robustesa del nostre codi.

© Copyright 2024. Tots els drets reservats