Sobes.tech
Middle

Welke testmethoden gebruik je om de Kotlin-code te testen?

sobes.tech AI

Antwoord van AI

Ik pas de volgende testmethoden toe:

  • Unit-test: Controle van kleine componenten (functies, klassen) in isolatie. Ik gebruik JUnit 5 of Spek.
  • Integratietest: Controle van de interactie tussen meerdere componenten of subsystemen.
  • UI-test: Testen van de gebruikersinterface op een echt apparaat of emulator. Voor Android gebruik ik Espresso of UI Automator.
  • Instrumentatietest: Test die op een apparaat of emulator moet worden uitgevoerd. Bevat UI-tests en enkele soorten integratietests.
  • End-to-End-test: Test van de hele applicatie van begin tot eind, waarbij gebruikersacties worden nagebootst.

Voor het schrijven van tests gebruik ik Mockito of MockK voor het mocken van afhankelijkheden en Hamcrest of AssertJ voor het schrijven van assertions.

// Voorbeeld van een unit-test met JUnit 5 en 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 moet het juiste totaal retourneren`() {
        // Mock de afhankelijkheid
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Controleer het resultaat
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Voorbeeld van een UI-test voor Android met 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 klikkenOpKnopVerandertTekst() {
        // Vind de knop op id en klik erop
        onView(withId(R.id.button)).perform(click())

        // Controleer of de tekst in TextView is veranderd
        onView(withId(R.id.textView)).check(matches(withText("Tekst gewijzigd!")))
    }
}