Sobes.tech
Middle

Jaké metody testování používáte k testování kódu v Kotlinu?

sobes.tech AI

Odpověď od AI

Používám následující metody testování:

  • Jednotkový test: Kontrola jednotlivých malých komponent (funkcí, tříd) v izolaci. Používám JUnit 5 nebo Spek.
  • Integrační test: Kontrola interakce mezi více komponentami nebo subsystémy.
  • UI test: Testování uživatelského rozhraní na skutečném zařízení nebo emulátoru. Pro Android používám Espresso nebo UI Automator.
  • Instrumentační test: Test, který je třeba spustit na zařízení nebo emulátoru. Zahrnuje UI testy a některé typy integračních testů.
  • End-to-End test: Testování celé aplikace od začátku do konce, napodobující akce uživatele.

Pro psaní testů používám Mockito nebo MockK pro mockování závislostí a Hamcrest nebo AssertJ pro psaní tvrzení.

// Příklad jednotkového testu s JUnit 5 a 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 by měl vrátit správný součet`() {
        // Mockování závislosti
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Kontrola výsledku
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Příklad UI testu pro Android s 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 kliknutíNaTlačítkoZměníText() {
        // Najít tlačítko podle id a kliknout na něj
        onView(withId(R.id.button)).perform(click())

        // Zkontrolovat, že text v TextView se změnil
        onView(withId(R.id.textView)).check(matches(withText("Text změněn!")))
    }
}