Patrones de Pruebas Kotlin
Patrones completos de pruebas Kotlin para escribir pruebas confiables y mantenibles siguiendo la metodología TDD con Kotest y MockK.
Cuándo Usar
- Escribir nuevas funciones o clases Kotlin
- Agregar cobertura de pruebas a código Kotlin existente
- Implementar pruebas basadas en propiedades
- Seguir el flujo de trabajo TDD en proyectos Kotlin
- Configurar Kover para cobertura de código
Cómo Funciona
- Identificar el código objetivo — Encontrar la función, clase o módulo a probar
- Escribir un spec Kotest — Elegir un estilo de spec (StringSpec, FunSpec, BehaviorSpec) acorde al alcance de la prueba
- Mockear dependencias — Usar MockK para aislar la unidad bajo prueba
- Ejecutar pruebas (ROJO) — Verificar que la prueba falla con el error esperado
- Implementar código (VERDE) — Escribir el código mínimo para pasar la prueba
- Refactorizar — Mejorar la implementación manteniendo las pruebas en verde
- Verificar cobertura — Ejecutar
./gradlew koverHtmlReporty verificar 80%+ de cobertura
Ejemplos
Las siguientes secciones contienen ejemplos detallados y ejecutables para cada patrón de prueba:
Referencia Rápida
- Specs Kotest — Ejemplos de StringSpec, FunSpec, BehaviorSpec, DescribeSpec en Estilos de Spec Kotest
- Mocking — Configuración de MockK, mocking de coroutines, captura de argumentos en MockK
- Flujo de trabajo TDD — Ciclo RED/GREEN/REFACTOR completo con EmailValidator en Flujo de Trabajo TDD para Kotlin
- Cobertura — Configuración de Kover y comandos en Cobertura con Kover
- Pruebas Ktor — Configuración de testApplication en Pruebas con Ktor testApplication
Flujo de Trabajo TDD para Kotlin
El Ciclo ROJO-VERDE-REFACTORIZAR
TDD Paso a Paso en Kotlin
Estilos de Spec Kotest
StringSpec (El Más Simple)
FunSpec (Similar a JUnit)
BehaviorSpec (Estilo BDD)
DescribeSpec (Estilo RSpec)
Matchers de Kotest
Matchers Principales
Matchers Personalizados
MockK
Mocking Básico
Mocking de Coroutines
Captura de Argumentos
Spy y Mocking Parcial
Pruebas de Coroutines
runTest para Funciones Suspend
Pruebas de Flows
TestDispatcher
Pruebas Basadas en Propiedades
Pruebas de Propiedades con Kotest
Generadores Personalizados
Pruebas Dirigidas por Datos
withData en Kotest
Ciclo de Vida y Fixtures de Prueba
BeforeTest / AfterTest
Extensiones de Kotest
Cobertura con Kover
Configuración de Gradle
Comandos de Cobertura
Objetivos de Cobertura
Pruebas con Ktor testApplication
Comandos de Prueba
Buenas Prácticas
HACER:
- Escribir pruebas PRIMERO (TDD)
- Usar los estilos de spec de Kotest de forma consistente en el proyecto
- Usar
coEvery/coVerifyde MockK para funciones suspend - Usar
runTestpara pruebas de coroutines - Probar comportamiento, no implementación
- Usar pruebas basadas en propiedades para funciones puras
- Usar fixtures de
data classpara mayor claridad
NO HACER:
- Mezclar frameworks de prueba (elegir Kotest y mantenerlo)
- Mockear data classes (usar instancias reales)
- Usar
Thread.sleep()en pruebas de coroutines (usaradvanceTimeBy) - Saltarse la fase ROJA en TDD
- Probar funciones privadas directamente
- Ignorar pruebas inestables (flaky tests)
Integración con CI/CD
Recuerda: Las pruebas son documentación. Muestran cómo debe usarse tu código Kotlin. Usa los matchers expresivos de Kotest para que las pruebas sean legibles y MockK para un mocking limpio de dependencias.

