Sobes.tech
Middle

Milyen tesztelési módszereket alkalmaz a Kotlin kód teszteléséhez?

sobes.tech MI

Válasz az MI-től

Az alábbi tesztelési módszereket alkalmazom:

  • Egységteszt: Kis komponensek (függvények, osztályok) izolált ellenőrzése. JUnit 5 vagy Spek használata.
  • Integrációs teszt: Több komponens vagy alrendszer közötti kölcsönhatás ellenőrzése.
  • UI teszt: A felhasználói felület tesztelése valódi eszközön vagy emulátoron. Android esetén Espresso vagy UI Automator használata.
  • Instrumentált teszt: Olyan teszt, amelyet eszközön vagy emulátoron kell futtatni. Ide tartoznak a UI és néhány integrációs típusú teszt.
  • Végponttól végpontig (End-to-End) teszt: Az alkalmazás teljes körű tesztelése a kezdetektől a végéig, felhasználói műveletek szimulálásával.

A tesztek írásához Mockito vagy MockK a függőségek mockolására, Hamcrest vagy AssertJ az állítások írására szolgál.

// JUnit 5 és MockK példája egységtesztre
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 helyes összeget ad vissza`() {
        // Függőség mockolása
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Eredmény ellenőrzése
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Espresso UI teszt Androidra
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 gombkattintás szöveg változást eredményez() {
        // Gomb megtalálása az id alapján és kattintás
        onView(withId(R.id.button)).perform(click())

        // Ellenőrzés, hogy a TextView szövege megváltozott
        onView(withId(R.id.textView)).check(matches(withText("Szöveg megváltozott!")))
    }
}