Pruebas en Kotlin: frameworks y herramientas para código de calidad

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 Kotlin: revisión completa de frameworks y herramientas



Kotlin es un lenguaje que está ganando popularidad rápidamente en el desarrollo backend (Spring Boot, Ktor) y Android. Sin embargo, un lenguaje potente requiere herramientas de prueba adecuadas. En este artículo, analizaremos los frameworks y bibliotecas clave para probar aplicaciones Kotlin: desde el clásico JUnit5 hasta los modernos Kotest y MockK. El material será útil tanto para principiantes como para desarrolladores experimentados que migran desde Java.



1. JUnit5 — la base de las pruebas modernas



JUnit5 (Jupiter) es el estándar de facto para pruebas unitarias en Java/Kotlin. En Kotlin se utiliza con características pequeñas pero importantes.



  • Soporte para lambdas y funciones de orden superior — las pruebas se pueden escribir de forma más concisa.
  • Anotaciones — @Test, @BeforeEach, @AfterAll funcionan como en Java.
  • Assumptions y Assertions — verificaciones integradas.


Ejemplo de una prueba simple con JUnit5 y Kotlin:



import org.junit.jupiter.api.Assertions.assertEqualsimport org.junit.jupiter.api.Test

class CalculatorTest {

private val calculator = Calculator()

@Test fun `addition of two numbers should return correct sum`() { val result = calculator.add(2, 3) assertEquals(5, result) }

@Test fun `should throw exception when dividing by zero`() { assertThrows<IllegalArgumentException> { calculator.divide(10, 0) } }}


Importante: Kotlin permite usar espacios en los nombres de las funciones de prueba (backticks), lo que hace que los nombres de las pruebas sean legibles en lenguaje natural.



2. Kotest — framework nativo de Kotlin



Kotest (anteriormente KotlinTest) es el framework más completo y flexible, completamente escrito en Kotlin. Ofrece varios estilos para escribir pruebas (estilo cadena, especificación, comportamiento) y potentes matchers integrados.



Características clave:

  • Property-based testing — generación automática de datos de prueba.
  • Pruebas basadas en datos — con tablas de datos de entrada.
  • Potentes matchers de aserción — shouldBe, shouldContain, shouldThrow y otros.
  • Soporte para Coroutines — testCoroutineScope integrado.


Ejemplo de prueba en estilo "String Spec":



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBeimport io.kotest.matchers.shouldThrow

class UserServiceTest : StringSpec({

val service = UserService()

"should return user by id" { val user = service.getUser(1) user.name shouldBe "Alice" }

"should throw exception for invalid id" { shouldThrow<NoSuchElementException> { service.getUser(-1) } }})


Property-based testing en Kotest:



import io.kotest.property.forAllimport io.kotest.property.arbitrary.int

class MathPropertiesTest : StringSpec({ "addition is commutative" { forAll<Int, Int> { a, b -> (a + b) == (b + a) } }})


3. MockK — mocks para Kotlin



A diferencia de Mockito (que también se puede usar), MockK está completamente adaptado a las particularidades de Kotlin: soporta sealed classes, object, extension functions y coroutines.



Características principales:

  • DSL conciso para crear mocks y stubs.
  • Soporte para mocks relax (llamadas no verificadas).
  • Verificación del orden de llamadas y número de llamadas.
  • Mocks para funciones suspend.

Recommendations