Sobes.tech
Middle

Welche Testmethoden verwenden Sie, um den Kotlin-Code zu testen?

sobes.tech KI

Antwort von AI

Ich wende die folgenden Testmethoden an:

  • Unit-Test: Überprüfung einzelner kleiner Komponenten (Funktionen, Klassen) isoliert. Ich verwende JUnit 5 oder Spek.
  • Integrationstest: Überprüfung der Interaktion zwischen mehreren Komponenten oder Subsystemen.
  • UI-Test: Testen der Benutzeroberfläche auf einem echten Gerät oder Emulator. Für Android verwende ich Espresso oder UI Automator.
  • Instrumentierungstest: Test, der auf einem Gerät oder Emulator ausgeführt werden muss. Beinhaltet UI-Tests und einige Arten von Integrationstests.
  • End-to-End-Test: Testen der gesamten Anwendung von Anfang bis Ende, das Benutzeraktionen simuliert.

Zum Schreiben der Tests verwende ich Mockito oder MockK für das Mocking von Abhängigkeiten und Hamcrest oder AssertJ für das Schreiben von Assertions.

// Beispiel für einen Unit-Test mit JUnit 5 und 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`() {
        // Abhängigkeit mocken
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Ergebnis prüfen
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Beispiel für einen UI-Test für Android mit 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() {
        // Button anhand der ID finden und klicken
        onView(withId(R.id.button)).perform(click())

        // Überprüfen, ob sich der Text im TextView geändert hat
        onView(withId(R.id.textView)).check(matches(withText("Text geändert!")))
    }
}