Sobes.tech
Junior

¿Qué bibliotecas utilizas para las pruebas en Kotlin?

sobes.tech AI

Respuesta de la IA

  • JUnit 5: Marco de trabajo estándar para pruebas unitarias en JVM. Lo uso para la mayoría de las pruebas unitarias.

  • MockK: Biblioteca para simular objetos y comportamientos. Es útil para crear mocks, stubs y verificar la interacción de objetos.

  • Kotest: Marco de trabajo multifuncional para pruebas, que soporta diferentes estilos de escritura de pruebas (Spec, WordSpec, StringSpec, etc.). Lo uso a menudo para escribir pruebas más expresivas y estructuradas.

  • Truth: Biblioteca para crear afirmaciones (assertions) legibles. Hace que las pruebas sean más comprensibles.

  • Robolectric: Marco de trabajo para probar aplicaciones Android sin un dispositivo virtual o emulador. Simula el entorno Android en JVM.

  • Espresso: Marco de trabajo de Google para probar la interfaz de usuario en Android. Lo uso para pruebas de integración y UI en proyectos Android.

Ejemplo de uso de MockK:

// Importamos las clases necesarias
import io.mockk.*
import org.junit.jupiter.api.Test

// Clase de ejemplo que vamos a probar
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Clase de dependencia que vamos a simular
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Creamos el mock de la dependencia
        val mockDependency = mockk<Dependency>()

        // Definimos el comportamiento del mock
        every { mockDependency.process("input") } returns "processed_data"

        // Creamos una instancia de la clase a probar con el mock
        val myService = MyService(mockDependency)

        // Ejecutamos el método a probar
        val result = myService.processData("input")

        // Verificamos el resultado
        assert(result == "Result: processed_data")

        // Verificamos que el método del mock fue llamado con el argumento esperado
        verify { mockDependency.process("input") }
    }
}