Pruebas en Kotlin: frameworks y herramientas para desarrolladores

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: frameworks y herramientas para escribir código confiable



Kotlin es un lenguaje moderno que se utiliza activamente para desarrollar aplicaciones Android, soluciones de servidor (Ktor, Spring Boot) y proyectos multiplataforma. La calidad del código depende directamente de la cobertura de pruebas. En este artículo, analizaremos las principales herramientas de prueba en Kotlin: frameworks para escribir pruebas, bibliotecas para mocking y utilidades para verificar corrutinas.



1. JUnit 5 — la base de las pruebas



JUnit 5 es el framework estándar para pruebas unitarias en Java/Kotlin. Proporciona anotaciones @Test, @BeforeEach, @AfterEach y un mecanismo de extensiones (Extensions). En Kotlin, las pruebas se ven concisas:



import org.junit.jupiter.api.Testimport org.junit.jupiter.api.Assertions.*

class CalculatorTest { private val calculator = Calculator()

@Test fun `addition should work correctly`() { assertEquals(4, calculator.add(2, 2)) }

@Test fun `division by zero throws exception`() { assertThrows<ArithmeticException> { calculator.divide(10, 0) } }}


Características del uso de JUnit 5 con Kotlin:

  • Los nombres de las pruebas se pueden escribir entre comillas invertidas — esto mejora la legibilidad.
  • Funciona con cualquier corrutina a través de @Test y la extensión kotlinx-coroutines-test.
  • Admite pruebas parametrizadas (@ParameterizedTest).


2. Kotest — un potente framework Kotlin-first



Kotest (anteriormente KotlinTest) es un framework completo desarrollado específicamente para Kotlin. Ofrece varios estilos de escritura de pruebas: String Spec, Fun Spec, Describe Spec y otros. Ejemplo usando Behaviour Driven Development (BDD):



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBe

class UserServiceTest : StringSpec({ "user should be created with correct name" { val user = UserService().createUser("Alice") user.name shouldBe "Alice" user.isActive shouldBe true }})


Ventajas de Kotest:

  • Matchers integrados (verificaciones) para colecciones, cadenas, números.
  • Soporte para corrutinas, proveedores de datos (@TestFactory) y timeouts.
  • Configuración flexible de pruebas a través de projectConfig.
  • Integración con Gradle y Maven.


3. MockK — mocking para Kotlin



MockK es una biblioteca para crear objetos mock que tiene en cuenta las características de Kotlin: funciones suspend, funciones de extensión, clases selladas y singletons object. Ejemplo de uso:



import io.mockk.*import org.junit.jupiter.api.Test

class UserServiceTest { @Test fun `should call repository when saving user`() { val repo = mockk<UserRepository>() every { repo.save(any()) } returns Unit

val service = UserService(repo) service.saveUser("Bob")

verify { repo.save(any()) } }}


Funcionalidades clave de MockK:

  • mockk() — creación de mock, spyk() — mock parcial de un objeto real.
  • coEvery y coVerify para trabajar con corrutinas.
  • Verificación del orden de las llamadas (verifyOrder), captura de argumentos (slot).
  • Soporte para anotaciones @MockK y @RelaxedMockK.


4. Pruebas de corrutinas: kotlinx-coroutines-test



Al probar código asíncrono con corrutinas, es importante controlar el tiempo. La biblioteca kotlinx-coroutines-test proporciona runTest y TestCoroutineDispatcher:



import ko                    

Recommendations