Sobes.tech
Middle

Quali metodi di test utilizzi per testare il codice in Kotlin?

sobes.tech AI

Risposta dell'AI

Applico i seguenti metodi di test:

  • Test unitario: Verifica di componenti piccoli (funzioni, classi) in isolamento. Uso JUnit 5 o Spek.
  • Test di integrazione: Verifica dell'interazione tra più componenti o sottosistemi.
  • Test UI: Test dell'interfaccia utente su un dispositivo reale o emulatore. Per Android, uso Espresso o UI Automator.
  • Test strumentale: Test che richiedono l'esecuzione su un dispositivo o emulatore. Include test UI e alcuni tipi di test di integrazione.
  • Test end-to-end: Test di tutta l'applicazione dall'inizio alla fine, simulando le azioni dell'utente.

Per scrivere i test, uso Mockito o MockK per il mocking delle dipendenze e Hamcrest o AssertJ per scrivere espressioni di asserzione.

// Esempio di test unitario con JUnit 5 e 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`() {
        // Mock della dipendenza
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Verifica il risultato
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Esempio di test UI per 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() {
        // Trova il pulsante per id e cliccaci sopra
        onView(withId(R.id.button)).perform(click())

        // Verifica che il testo nel TextView sia cambiato
        onView(withId(R.id.textView)).check(matches(withText("Testo modificato!")))
    }
}