Pruebas en Kotlin: frameworks y herramientas para código de calidad
Kotlin es un lenguaje de programación moderno que funciona sobre la JVM. Gracias a su compatibilidad con Java, para probar código Kotlin se pueden usar frameworks clásicos de Java (JUnit, Mockito), así como herramientas modernas escritas específicamente para Kotlin. En este artículo analizaremos los principales frameworks, sus características y proporcionaremos ejemplos prácticos.
1. JUnit 5 — la base de las pruebas
JUnit 5 es el framework estándar para pruebas unitarias en la JVM. Funciona excelentemente con Kotlin gracias al soporte de lambdas, funciones de extensión y clases de datos.
import org.junit.jupiter.api.Testimport org.junit.jupiter.api.Assertions.*
class CalculatorTest { @Test fun `addition should return correct sum`() { val result = Calculator().add(2, 3) assertEquals(5, result) }}Características de JUnit 5 en Kotlin:
- Los nombres de las pruebas se pueden escribir con acentos graves y espacios — mejora la legibilidad
- Soporte para pruebas parametrizadas mediante
@ParameterizedTest - Funciones de aserción integradas (assertAll, assertThrows)
- Se combina fácilmente con MockK y Mockito
2. Kotest — framework de nueva generación
Kotest (anteriormente KotlinTest) es un potente framework escrito desde cero en Kotlin. Ofrece múltiples estilos para describir pruebas (StringSpec, BehaviorSpec, FunSpec y otros).
import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBe
class StringSpecExample : StringSpec({ "length should return correct size" { "hello".length shouldBe 5 } "startsWith should work" { "world".startsWith("wo") shouldBe true }})Ventajas de Kotest:
- Más de 200 matchers integrados (shouldBe, shouldContain, shouldBeGreaterThan)
- Soporte para property-based testing (generación de datos aleatorios)
- Proveedores de datos integrados para pruebas tabulares
- Integración completa con Gradle y Maven
3. MockK — mocks para Kotlin
MockK es una biblioteca para crear objetos mock, diseñada específicamente para Kotlin. Tiene en cuenta la seguridad de nulos, las corrutinas y las funciones de extensión.
import io.mockk.everyimport io.mockk.mockkimport io.mockk.verifyimport org.junit.jupiter.api.Test
class UserServiceTest { @Test fun `should call repository`() { val repo = mockk<UserRepository>() every { repo.findUser(1) } returns User("Alice")
val service = UserService(repo) service.getUserName(1)
verify { repo.findUser(1) } }}Funcionalidades clave de MockK:
- Soporte para
spy(mockeo parcial) - Trabajo con funciones suspend y corrutinas (
coEvery,coVerify) - Matchers convenientes para argumentos (
any(),capture()) - Limpieza automática de mocks después de la prueba
4. Spek — estilo BDD de pruebas
Spek es un framework para Behaviour-Driven Development. Permite describir pruebas en el formato «Given-When-Then».
import org.spekframework.spek2.Spekimport org.spekframework.spek2.style.specification.describe
class CalculatorSpek : Spek({ describe("Calculator") { val calc by memoized { Calculator() }
context("addition") { it("returns sum of two numbers") { val result = calc.add(2, 3) assertEquals(5, result) } } }})Características de Spek:
- Estructura de pruebas legible para especificaciones de negocio
- Soporte para contextos anidados y fixtures globales
- Integración con
También en la biblioteca
Análisis de HTML en C# (.NET): bibliotecas HtmlAgilityPack y AngleSharp
Caché en PHP: Redis, Memcached y soluciones integradas
Cliente Redis (Jedis) para Java: guía completa con ejemplos
AutoMapper para C# (.NET): guía completa con ejemplos