Pruebas en Swift (iOS/macOS): frameworks y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Pruebas en Swift (iOS/macOS): revisión de frameworks y herramientas



La calidad de las aplicaciones móviles y de escritorio en Swift depende directamente de un sistema de pruebas bien estructurado. En el ecosistema de Apple existen varios frameworks maduros que cubren todos los niveles de la pirámide de pruebas: desde pruebas unitarias hasta pruebas de UI y pruebas de regresión visual. En este artículo analizaremos las herramientas clave, sus capacidades y proporcionaremos ejemplos prácticos en Swift.



1. XCTest — el framework estándar de Apple



XCTest está integrado en Xcode y es la herramienta principal para escribir pruebas unitarias y de UI. Soporta pruebas asíncronas, rendimiento e integración con CI/CD.



Ejemplo de prueba unitaria:

import XCTest@testable import MyApp

final class CalculatorTests: XCTestCase { var calculator: Calculator!

override func setUp() { super.setUp() calculator = Calculator() }

func testAddition() { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "La suma debe ser correcta") }

func testAsyncOperation() { let expectation = XCTestExpectation(description: "Operación asíncrona") calculator.fetchRemoteValue { value in XCTAssertGreaterThan(value, 0) expectation.fulfill() } wait(for: [expectation], timeout: 5.0) }}


Capacidades clave de XCTest:

  • Afirmaciones: XCTAssertEqual, XCTAssertNil, XCTAssertThrowsError
  • Medición de rendimiento mediante measure
  • Pruebas de UI con XCUIApplication y XCUIElement
  • Soporte para ejecución paralela de pruebas


2. Quick + Nimble — enfoque BDD



Quick es un framework BDD que permite escribir pruebas en el estilo "Given-When-Then". Nimble es su acompañante, que proporciona comparadores expresivos.



Ejemplo con Quick/Nimble:

import Quickimport Nimble

class UserSpec: QuickSpec { override func spec() { describe("Modelo de usuario") { var user: User!

beforeEach { user = User(name: "Alice", age: 30) }

context("cuando la edad es válida") { it("debería ser adulto") { expect(user.isAdult).to(beTrue()) } }

context("al actualizar el nombre") { it("cambia el nombre correctamente") { user.updateName("Bob") expect(user.name) == "Bob" } } } }}


Ventajas:

  • Pruebas legibles, comprensibles para no programadores
  • Comparadores flexibles: beCloseTo(), contain(), throwError()
  • Soporte para asincronía mediante toEventually()


3. XCUITest — pruebas de UI



Para probar la interfaz de usuario se utiliza XCUITest. Simula acciones del usuario: toques, deslizamientos, entrada de texto.



Ejemplo de prueba de UI para iOS:

import XCTest

class LoginUITests: XCTestCase { let app = XCUIApplication()

override func setUp() { continueAfterFailure = false app.launch() }

func testSuccessfulLogin() { let usernameField = app.textFields["username"] usernameField.tap() usernameField.typeText("testuser")

let passwordField = app.secureTextFields["password"] passwordField.tap() passwordField.typeText("password123")

app.buttons["Login"].tap() XCTAssertTrue(app.staticTexts["Welcome"].exists) }}


Recommendations