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!")))
}
}