Sobes.tech
Middle

Ce metode de testare folosești pentru a testa codul în Kotlin?

sobes.tech AI

Răspuns de la AI

Aplic următoarele metode de testare:

  • Testare unitate: Verificarea componentelor mici (funcții, clase) în izolare. Folosesc JUnit 5 sau Spek.
  • Testare de integrare: Verificarea interacțiunii între mai multe componente sau subsisteme.
  • Testare UI: Testarea interfeței utilizatorului pe un dispozitiv real sau emulator. Pentru Android, folosesc Espresso sau UI Automator.
  • Testare instrumentală: Test care necesită rulare pe un dispozitiv sau emulator. Include teste UI și unele tipuri de teste de integrare.
  • Testare End-to-End: Testarea întregii aplicații de la început până la sfârșit, simulând acțiunile utilizatorului.

Pentru scrierea testelor, folosesc Mockito sau MockK pentru mockarea dependențelor și Hamcrest sau AssertJ pentru scrierea expresiilor de afirmație.

// Exemplu de test unitar cu 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 ar trebui să returneze suma corectă`() {
        // Mock dependența
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Verificăm rezultatul
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Exemplu de test UI pentru Android cu 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 clicareaButonuluiSchimbăTextul() {
        // Găsește butonul după id și apasă pe el
        onView(withId(R.id.button)).perform(click())

        // Verifică dacă textul din TextView s-a schimbat
        onView(withId(R.id.textView)).check(matches(withText("Text schimbat!")))
    }
}