BDD en Swift: cómo escribir pruebas que entiende el negocio

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

Por qué las pruebas normales no salvan, y qué es BDD

Cada desarrollador iOS se ha enfrentado a esta situación: escribiste cien pruebas unitarias, cobertura del 90%, pero en la siguiente demo el jefe dice: «¿Por qué al presionar este botón no pasa nada?». Miras el código — todo funciona. El problema es que las pruebas unitarias verifican el código, no el comportamiento del sistema. Aquí es donde entra BDD (Behaviour-Driven Development) — una metodología que elimina la frontera entre las pruebas «técnicas» y la «lógica de negocio».

BDD en Swift no es solo un término de moda. Es una forma de escribir pruebas que no solo un desarrollador, sino también un analista, tester o incluso el cliente pueda leer. En este artículo, analizaremos cómo implementar behaviour-driven development en tu proyecto iOS, utilizando los frameworks Quick y Nimble, y mostraremos ejemplos prácticos en Swift.



Qué es BDD en palabras sencillas

Imagina que no escribes pruebas, sino un guion para una película. En el guion hay personajes (usuario, sistema), eventos (presionar un botón, enviar una solicitud) y un resultado esperado (aparición de una alerta, actualización de la UI). BDD es ese «guion», pero para tu aplicación.

La idea principal: las pruebas deben describir el comportamiento del sistema desde el punto de vista del usuario. En lugar de «el método saveUser() devuelve true», escribes «cuando el usuario ingresa un email válido y presiona "Guardar", el sistema muestra el mensaje "Éxito"».



Cómo se diferencia BDD de TDD

Muchos confunden BDD con TDD (Test-Driven Development). La diferencia es simple:

  • TDD — escribimos la prueba, luego el código, luego refactorizamos. Enfoque en la corrección de la implementación.
  • BDD — escribimos un escenario de comportamiento, luego el código que implementa ese comportamiento. Enfoque en el valor para el usuario.

BDD es una evolución de TDD. Si TDD responde a la pregunta «¿el código funciona correctamente?», BDD responde «¿el código hace lo que el negocio necesita?».



Herramientas para BDD en Swift

En el mundo de Swift hay dos «pilares» principales para behaviour-driven development:

  • Quick — framework para escribir pruebas al estilo BDD. Reemplaza el XCTest estándar y proporciona la sintaxis describe/context/it.
  • Nimble — biblioteca de «matchers» (verificaciones). En lugar de XCTAssertEqual, escribes expect(value).to(equal(5)) — se lee como una oración en inglés.

Estas herramientas funcionan muy bien juntas y permiten escribir pruebas que parecen una especificación.



Instalación de Quick y Nimble mediante Swift Package Manager

Agrega las dependencias en tu Package.swift o a través de Xcode: File → Add Packages → ingresa la URL del repositorio de Quick: https://github.com/Quick/Quick.git y de Nimble: https://github.com/Quick/Nimble.git.

Ejemplo para Package.swift:

// swift-tools-version:5.9import PackageDescription

let package = Package( name: "MyApp", dependencies: [ .package(url: "https://github.com/Quick/Quick.git", from: "7.0.0"), .package(url: "https://github.com/Quick/Nimble.git", from: "13.0.0"), ], targets: [ .target(name: "MyApp"), .testTarget( name: "MyAppTests", dependencies: ["MyApp", "Quick", "Nimble"] ) ])


Escribimos la primera prueba BDD en Swift

Supongamos que tenemos un LoginService simple que verifica el usuario y la contraseña. En lugar de escribir un aburrido XCTest, crearemos una prueba al estilo BDD.



Código del servicio (para contexto)

class LoginService {    func authenticate(username: String, password: String) -> Result<User, LoginError> {        guard !username.isEmpty else { return .failure(.emptyUsername) }        guard !password.isEmpty else { return .failure(.emptyPassword) }        guard pas                

Blogs

Book Recommendations