Sobes.tech
Middle

Kotlin kodunu sınaqdan keçirmək üçün hansı test metodlarından istifadə edirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Aşa aşağıdakı test metodlarını tətbiq edirəm:

  • Unit-test: Kiçik komponentlərin (funksiyalar, sinflər) müstəqil yoxlanması. JUnit 5 və ya Spek istifadə edirəm.
  • İnteqrasiya testləri: Bir neçə komponent və ya subsistemlər arasındakı qarşılıqlı əlaqənin yoxlanması.
  • UI test: İstifadəçi interfeysinin real cihaz və ya emulator üzərində test edilməsi. Android üçün Espresso və ya UI Automator istifadə edirəm.
  • Instrumental test: Cihaz və ya emulator üzərində işlədilməsi tələb olunan testlər. UI və bəzi inteqrasiya testlərini əhatə edir.
  • End-to-End test: Bütün tətbiqin başlanğıcdan sona qədər test edilməsi, istifadəçi hərəkətlərinin təqlididir.

Testlərin yazılmasında, asılılıqları mock etmək üçün Mockito və ya MockK, təsdiqləmək üçün Hamcrest və ya AssertJ istifadə edirəm.

// JUnit 5 və MockK ilə nümunə unit test
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 düzgün cəm qaytarmalıdır`() {
        // Asılılığı mock et
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Nəticəni yoxla
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Android üçün Espresso ilə UI test nümunəsi
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 düyməni klikləmə mətnin dəyişməsinə səbəb olur() {
        // ID ilə düyməni tap və klik et
        onView(withId(R.id.button)).perform(click())

        // TextView-dəki mətnin dəyişdiyini yoxla
        onView(withId(R.id.textView)).check(matches(withText("Mətn dəyişdi!")))
    }
}