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
-
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.
-
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:
- Selecciona el menú "Product" a Xcode.
- 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.
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari