BDD en Kotlin: Cómo escribir pruebas que incluso los gerentes entenderán

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

BDD en Kotlin: Escribimos pruebas que leen tanto gerentes como desarrolladores

\n\n

¿Alguna vez le ha mostrado una prueba unitaria a su product manager? Probablemente no. Porque es como mostrar los planos de un motor a reacción a un piloto: útil, pero incomprensible. Behaviour-Driven Development (BDD) en Kotlin resuelve precisamente este problema: transforma los assert's secos en escenarios vivos que describen el comportamiento del sistema en lenguaje humano.

\n\n

En este artículo, analizaremos cómo implementar BDD en Kotlin utilizando frameworks modernos: Kotest y Spek. Verá cómo escribir pruebas en el estilo Given-When-Then, que son a la vez documentación y verificación automática. Y sí, incluso su líder técnico podrá leerlas sin preparación.

\n\n

¿Qué es BDD y en qué se diferencia de TDD?

\n\n

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

\n\n
    \n
  • TDD — se trata de «¿cómo verifico este método?»
  • \n
  • BDD — se trata de «¿cómo obtendrá el usuario valor de esta función?»
  • \n
\n\n

Behaviour-driven development se centra en el comportamiento del sistema, no en los detalles de implementación. Usted describe un escenario: bajo ciertas condiciones (Given), cuando ocurre una acción (When), el sistema produce el resultado esperado (Then).

\n\n

Por ejemplo, en lugar de escribir:
assertEquals(42, calculator.add(20, 22)),
escribirá:

\n\n
Given("tengo una calculadora") {\n    val calc = Calculator()\n    When("sumo 20 y 22") {\n        val result = calc.add(20, 22)\n        Then("el resultado debe ser 42") {\n            result shouldBe 42\n        }\n    }\n}\n
\n\n

Reconozca que la segunda opción se lee como una historia, no como una instrucción técnica.

\n\n

Por qué Kotlin es ideal para BDD

\n\n

Kotlin es un lenguaje que por sí mismo invita a escribir código legible. Las funciones de extensión, la notación infija, las lambdas con receptor — todo esto hace que las pruebas BDD en Kotlin sean lo más naturales posible. Puede escribir shouldBe, shouldThrow y otros matchers que parecen inglés.

\n\n

Además, Kotlin admite múltiples paradigmas, lo que permite usar diferentes frameworks para BDD. Veamos los dos más populares.

\n\n

Framework Kotest: BDD listo para usar

\n\n

Kotest (anteriormente KotlinTest) es un potente framework de pruebas multiplataforma. Soporta varios estilos, incluyendo BehaviorSpec, que es ideal para BDD.

\n\n

Así es como se ve un escenario BDD completo en Kotlin usando Kotest:

\n\n
import io.kotest.core.spec.style.BehaviorSpec\nimport io.kotest.matchers.shouldBe\n\nclass CartSpec : BehaviorSpec({\n    given("carrito vacío") {\n        val cart = ShoppingCart()\n        `when`("agregamos un producto con precio 100") {\n            cart.addItem(Item("Libro", 100.0))\n            then("el carrito debe tener 1 producto") {\n                cart.itemCount shouldBe 1\n            }\n            then("el total debe ser 100") {\n                cart.total shouldBe 100.0\n            }\n        }\n        `when`("agregamos un producto y aplicamos un descuento del 10%") {\n            cart.addItem(Item("Libro", 100.0))\n            cart.applyDiscount(10.0)\n            then("el total final debe ser 90") {\n                cart.total shouldBe 90.0\n            }\n        }\n    }\n})\n
\n\n

Observe las comillas invertidas alrededor de when. Esta es una característica de Kotlin: when es una palabra reservada, pero entre comillas funciona como un identificador. Algunos desarrolladores prefieren usar When con mayúscula.

\n\n

Spek: BDD estructurado para Kotlin

\n\n

Spek

Blogs

Book Recommendations