Sobes.tech
Middle

Aké metódy testovania používate na testovanie kódu v Kotlin?

sobes.tech AI

Odpoveď od AI

Používam nasledujúce metódy testovania:

  • Jednotkové testovanie: Kontrola jednotlivých malých komponentov (funkcií, tried) v izolácii. Používam JUnit 5 alebo Spek.
  • Integračné testovanie: Kontrola interakcie medzi viacerými komponentmi alebo subsystémami.
  • UI testovanie: Testovanie používateľského rozhrania na reálnom zariadení alebo emulátore. Pre Android používam Espresso alebo UI Automator.
  • Instrumentačné testovanie: Testovanie, ktoré vyžaduje vykonanie na zariadení alebo emulátore. Zahŕňa UI a niektoré druhy integračného testovania.
  • End-to-End testovanie: Testovanie celej aplikácie od začiatku do konca, simulujúce akcie používateľa.

Na písanie testov používam Mockito alebo MockK na mockovanie závislostí a Hamcrest alebo AssertJ na písanie tvrdení.

// Príklad jednotkového testu s použitím 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 should return correct sum`() {
        // Mockovanie 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
}
// მაგალითი UI ტესტისთვის Android-ისთვის 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() {
        // იპოვეთ ღილაკი id-ის მიხედვით და დაწკაპეთ
        onView(withId(R.id.button)).perform(click())

        // გადაამოწმეთ, რომ TextView-ის ტექსტი შეიცვალა
        onView(withId(R.id.textView)).check(matches(withText("ტექსტი შეიცვალა!")))
    }
}