Introducción a Mockk: qué es y para qué sirve
\n\nMockk es una biblioteca moderna para la simulación (creación de objetos simulados) en el lenguaje de programación Kotlin. Está diseñada específicamente teniendo en cuenta las características de Kotlin: nulabilidad, funciones de extensión, corrutinas, objetos complementarios y otras capacidades que no están presentes en Java.
\n\n¿Para qué sirve la biblioteca Mockk? Al escribir pruebas unitarias, a menudo nos encontramos con situaciones donde la clase bajo prueba depende de otras clases, servicios, bases de datos o API externas. Para aislar el código bajo prueba y hacer que las pruebas sean rápidas, confiables e independientes de factores externos, creamos "mocks" (objetos simulados) — objetos ficticios que imitan el comportamiento de las dependencias reales.
\n\nPrincipales capacidades de Mockk:
\n- \n
- Creación de mocks para clases, interfaces y objetos \n
- Soporte de anotaciones (@MockK, @RelaxedMockK, @SpyK) \n
- Trabajo con corrutinas (coEvery, coVerify) \n
- Simulación de funciones de extensión \n
- Simulación de métodos estáticos y objetos complementarios \n
- Soporte de slots y captura de argumentos \n
- Soporte de simulación parcial (spy) \n
Instalación de Mockk
\n\nMockk se distribuye a través de Maven Central. Para agregarlo al proyecto, añada la dependencia en el archivo build.gradle.kts (para Gradle con Kotlin DSL):
// build.gradle.kts\ndependencies {\n testImplementation("io.mockk:mockk:1.13.10")\n}\n\nPara Gradle con Groovy DSL:
\n\n// build.gradle\ndependencies {\n testImplementation "io.mockk:mockk:1.13.10"\n}\n\nPara Maven:
\n\n<dependency>\n <groupId>io.mockk</groupId>\n <artifactId>mockk</artifactId>\n <version>1.13.10</version>\n <scope>test</scope>\n</dependency>\n\nSi utiliza corrutinas, no es necesario agregar nada adicional — el soporte de corrutinas está integrado en Mockk.
\n\nInicio rápido con ejemplo de código
\n\nConsideremos un ejemplo sencillo. Supongamos que tenemos un servicio UserService que depende de un repositorio UserRepository:
// Clases para probar\nclass UserRepository {\n fun findById(id: Long): String {\n // La implementación real accede a la BD\n return "Real User"\n }\n}\n\nclass UserService(private val repository: UserRepository) {\n fun getUserName(id: Long): String {\n val user = repository.findById(id)\n return if (user.isNotEmpty()) user else "Unknown"\n }\n}\n\nAhora escribamos una prueba usando Mockk:
\n\nimport io.mockk.every\nimport io.mockk.mockk\nimport io.mockk.verify\nimport org.junit.jupiter.api.Test\n\nclass UserServiceTest {\n\n @Test\n fun `getUserName debería devolver el nombre de usuario del repositorio`() {\n // 1. Creamos un mock para el repositorio\n val mockRepository = mockk<UserRepository>()\n \n // 2. Definimos el comportamiento del mock\n every { mockRepository.findById(1L) } returns "John Doe"\n \n // 3. Creamos el objeto bajo prueba con el mock\n val service = UserService(mockRepository)\n \n // 4. Llamamos al método bajo prueba\n val result = service.getUserName(1L)\n \n // 5. Verificamos el resultado\n assert(result == "John Doe")\n \n // 6. Verificamos que el método fue llamado exactamente 1 vez\n verify(exactly = 1) { mockRepository.findById(1L) }\n }\n}\n\nMétodos y funciones principales de Mockk
\n\nConsideremos 10 métodos clave de la biblioteca con descripción detallada y ejemplos.
\n\n1. mockk() — creación de un objeto mock
\nQué hace: Crea un objeto mock para la clase o interfaz especificada. Todos los métodos del mock, por defecto, devuelven valores predeterminados (null, 0, false) y lanzan una excepción si
También en la biblioteca
Caché en C++: Redis, capa de datos y otras herramientas
Configuración de aplicaciones JavaScript: biblioteca config
Geolocalización y mapas en Go: revisión de bibliotecas y ejemplos de código
Generación de informes PDF en PHP: revisión de bibliotecas y ejemplos