Sobes.tech
Middle

Kotlin kodini sinash uchun qanday test usullaridan foydalanasiz?

sobes.tech AI

AIdan javob

Quyidagi test usullarini qo'llayman:

  • Birlik testlari: Ajratilgan kichik komponentlarni (funktsiyalar, sinflar) tekshirish. JUnit 5 yoki Spek dan foydalanaman.
  • Integratsion test: Bir nechta komponent yoki subsistemlar o'rtasidagi o'zaro ta'sirni tekshirish.
  • UI test: Foydalanuvchi interfeysini haqiqiy qurilma yoki emulyatorda test qilish. Android uchun Espresso yoki UI Automator dan foydalanaman.
  • Instrumental test: Qurilma yoki emulyatorda bajarilishi kerak bo'lgan test. UI va ba'zi integratsiya testlarini o'z ichiga oladi.
  • End-to-End test: Foydalanuvchi harakatlarini taqlid qiladigan butun ilovani boshidan oxirigacha test qilish.

Testlarni yozishda, bog'liqliklarni mock qilish uchun Mockito yoki MockK, tasdiqlash uchun Hamcrest yoki AssertJ dan foydalanaman.

// JUnit 5 va MockK bilan birlik testining misoli
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 to'g'ri yig'indini qaytarishi kerak`() {
        // Bog'liqlikni mock qilish
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Natijani tekshirish
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Android uchun Espresso bilan UI testining misoli
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 tugmani bosish matnni o'zgartiradi() {
        // ID bo'yicha tugmani topish va bosish
        onView(withId(R.id.button)).perform(click())

        // TextView'dagi matn o'zgarganligini tekshirish
        onView(withId(R.id.textView)).check(matches(withText("Matn o'zgartirildi!")))
    }
}