Sobes.tech
Middle

¿Qué métodos de prueba utilizas para probar el código en Kotlin?

sobes.tech AI

Respuesta de la IA

Aplico los siguientes métodos de prueba:

  • Prueba unitaria: Verificación de componentes pequeños individuales (funciones, clases) en aislamiento. Uso JUnit 5 o Spek.
  • Prueba de integración: Verificación de la interacción entre varios componentes o subsistemas.
  • Prueba de interfaz de usuario: Prueba de la interfaz de usuario en un dispositivo real o emulador. Para Android, uso Espresso o UI Automator.
  • Prueba instrumental: Prueba que requiere ejecución en un dispositivo o emulador. Incluye pruebas de UI y algunos tipos de pruebas de integración.
  • Prueba de extremo a extremo: Prueba de toda la aplicación desde el principio hasta el final, simulando acciones del usuario.

Para escribir las pruebas, uso Mockito o MockK para simular dependencias y Hamcrest o AssertJ para escribir expresiones de afirmación.

// Ejemplo de prueba unitaria usando JUnit 5 y MockK
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class MyServiceTest {

    @Test
    fun `calculateSum should return correct sum`() {
        // Simulamos la dependencia
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

        val service = MyService(dependency)
        val result = service.calculateSum(20)

        // Verificamos el resultado
        assertEquals(30, result)
    }
}

class MyService(private val dependency: Dependency) {
    fun calculateSum(a: Int): Int {
        return a + dependency.getValue()
    }
}

interface Dependency {
    fun getValue(): Int
}
// Ejemplo de prueba de UI para Android con Espresso
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import org.junit.Rule
import org.junit.Test

class MainActivityTest {

    @get:Rule
    var activityRule: ActivityScenarioRule<MainActivity> = ActivityScenarioRule(MainActivity::class.java)

    @Test
    fun clickingButtonChangesText() {
        // Encontrar el botón por id y hacer clic en él
        onView(withId(R.id.button)).perform(click())

        // Verificar que el texto en TextView cambió
        onView(withId(R.id.textView)).check(matches(withText("¡Texto cambiado!")))
    }
}