0Pricing
Kotlin Academy · Lección

Mocking con MockK

Simule las dependencias

Mocking con MockK es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué es MockK?

MockK es una biblioteca de mocking creada para Kotlin. Crea versiones simuladas de las dependencias para que pueda probar una clase de forma aislada.

  • Compatibilidad completa con Kotlin (objetos, extensiones y corrutinas)
  • DSL legible para configurar comportamientos y verificar llamadas

Añadir MockK

Añada MockK como dependencia de pruebas.

dependencies {
    testImplementation("io.mockk:mockk:1.13.11")
}

Crear un mock

Use mockk<Type>() para crear un mock. De forma predeterminada, sus métodos no están configurados y fallarán si se llaman.

import io.mockk.mockk

interface Repo { fun find(id: Int): String }

val repo = mockk<Repo>()

Configurar comportamientos con every

Defina el comportamiento mediante every { } returns .... Esto indica al mock qué debe devolver para una llamada determinada.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }

val repo = mockk<Repo>()
// every { repo.find(1) } returns "Ada"

Verificar llamadas

Use verify { } para comprobar que se ha llamado a un método. Puede exigir un número exacto de llamadas.

import io.mockk.verify

// verify { repo.find(1) }
// verify(exactly = 2) { repo.find(any()) }
// verify(exactly = 0) { repo.find(99) }

Matchers de argumentos

Los matchers como any(), eq() y match { } hacen que la configuración y las verificaciones sean flexibles.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(any()) } returns "X"
// every { repo.find(match { it > 10 }) } returns "big"

Mocks relajados

Un mock relaxed devuelve valores predeterminados razonables (0, una cadena vacía, etc.) para las llamadas sin configurar, de modo que no tenga que configurarlo todo.

import io.mockk.mockk

interface Logger { fun log(msg: String) }

val logger = mockk<Logger>(relaxed = true)

Capturar argumentos

Use un slot con capture() para inspeccionar el argumento exacto que se ha pasado a un método simulado.

import io.mockk.slot
import io.mockk.verify

val msgSlot = slot<String>()
// verify { logger.log(capture(msgSlot)) }
// println(msgSlot.captured)

Spies

Un spyk envuelve un objeto real: los métodos reales se ejecutan salvo que los configure. Resulta útil para realizar mocking parcial.

import io.mockk.spyk

class Calc { fun square(n: Int) = n * n }

val calc = spyk(Calc())
// real square runs; you can still verify { calc.square(3) }

Lanzar excepciones desde un mock

Configure un método para que lance una excepción y así poder probar las rutas de gestión de errores.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(0) } throws NoSuchElementException()

Limpiar el estado

Llame a clearAllMocks() en @AfterEach o use la MockKExtension de JUnit5 para restablecer el estado de los mocks entre pruebas y evitar que se filtre.

import io.mockk.clearAllMocks
import org.junit.jupiter.api.AfterEach

class ServiceTest {
    @AfterEach
    fun tearDown() { clearAllMocks() }
}

Comprobación rápida

Tiene un mock con muchos métodos, pero solo le interesa uno. Quiere que los métodos sin configurar devuelvan valores predeterminados inofensivos. ¿Qué crea?

Resumen

MockK le permite aislar el código que se está probando:

  • mockk() crea mocks y every { } returns los configura
  • verify { } comprueba las interacciones
  • Matchers, captura con slot, spyk y mocks relajados
  • clearAllMocks() entre pruebas

A continuación: probar corrutinas.

Preguntas frecuentes

¿La lección «Mocking con MockK» es gratis?

Sí — el texto completo de «Mocking con MockK» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Mocking con MockK»?

Simule las dependencias Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Mocking con MockK»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Escritura de pruebas con JUnit5
  2. Aserciones
  3. Mocking con MockK
  4. Pruebas de coroutines
← Volver a Kotlin Academy