Middle
Jakie metody testowania stosujesz do testowania kodu w Kotlin?
sobes.tech AI
Odpowiedź od AI
Stosuję następujące metody testowania:
- Test jednostkowy: Sprawdzanie poszczególnych małych komponentów (funkcji, klas) w izolacji. Używam JUnit 5 lub Spek.
- Test integracyjny: Sprawdzanie interakcji między kilkoma komponentami lub podsystemami.
- Test UI: Testowanie interfejsu użytkownika na rzeczywistym urządzeniu lub emulatorze. Dla Androida używam Espresso lub UI Automator.
- Test instrumentalny: Test, który wymaga uruchomienia na urządzeniu lub emulatorze. Obejmuje testy UI i niektóre rodzaje testów integracyjnych.
- Test end-to-end: Testowanie całej aplikacji od początku do końca, symulując działania użytkownika.
Do pisania testów używam Mockito lub MockK do mockowania zależności oraz Hamcrest lub AssertJ do pisania wyrażeń asercji.
// Przykład testu jednostkowego z użyciem JUnit 5 i 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`() {
// Mockowanie zależności
val dependency: Dependency = mockk()
every { dependency.getValue() } returns 10
val service = MyService(dependency)
val result = service.calculateSum(20)
// Sprawdzanie wyniku
assertEquals(30, result)
}
}
class MyService(private val dependency: Dependency) {
fun calculateSum(a: Int): Int {
return a + dependency.getValue()
}
}
interface Dependency {
fun getValue(): Int
}
// Przykład testu UI dla Androida z 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() {
// Znajdź przycisk po id i kliknij go
onView(withId(R.id.button)).perform(click())
// Sprawdź, czy tekst się zmienił
onView(withId(R.id.textView)).check(matches(withText("Tekst zmieniony!")))
}
}