Sobes.tech
Middle

Quelles méthodes de test utilisez-vous pour tester le code en Kotlin?

sobes.tech IA

Réponse de l'IA

J'applique les méthodes de test suivantes:

  • Test unitaire : Vérification de composants individuels (fonctions, classes) en isolation. J'utilise JUnit 5 ou Spek.
  • Test d'intégration : Vérification de l'interaction entre plusieurs composants ou sous-systèmes.
  • Test d'interface utilisateur : Test de l'interface utilisateur sur un appareil réel ou un émulateur. Pour Android, j'utilise Espresso ou UI Automator.
  • Test instrumental : Test nécessitant une exécution sur un appareil ou un émulateur. Inclut les tests UI et certains types de tests d'intégration.
  • Test de bout en bout : Test de toute l'application du début à la fin, simulant les actions de l'utilisateur.

Pour écrire les tests, j'utilise Mockito ou MockK pour simuler les dépendances et Hamcrest ou AssertJ pour écrire des assertions.

// Exemple de test unitaire avec JUnit 5 et 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 de la dépendance
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Vérification du résultat
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Exemple de test UI pour Android avec 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() {
        // Trouver le bouton par id et cliquer dessus
        onView(withId(R.id.button)).perform(click())

        // Vérifier que le texte dans le TextView a changé
        onView(withId(R.id.textView)).check(matches(withText("Texte modifié !")))
    }
}