Sobes.tech
Middle

Ի՞նչ մեթոդներ եք օգտագործում Kotlin կոդը թեստավորելու համար:

sobes.tech AI

Պատասխան AI-ից

Ես օգտագործում եմ հետևյալ թեստավորման մեթոդները:

  • Միավորային թեստավորում: Անհատական փոքր կոմպոնենտների (ֆունկցիաներ, դասեր) ստուգում առանձին: Օգտագործում եմ JUnit 5 կամ Spek:
  • Ինտեգրացիոն թեստավորում: Բազմաթիվ կոմպոնենտների կամ ենթամշակույթների փոխազդեցության ստուգում:
  • UI թեստավորում: Օգտագործողի ինտերֆեյսի թեստավորում իրական սարքավորებაზე կամ էմուլատորում: Android-ի համար օգտագործում եմ Espresso կամ UI Automator:
  • Անձնական թեստավորում: Թեստավորումը, որը պահանջում է սարքավորումը կամ էմուլատորը: ներառում է UI և որոշ տեսակների ինտեգրացիոն թեստավորում:
  • Ավարտ-դեպի (End-to-End) թեստավորում: Բոլոր հավելվածի մասերի թեստավորում սկզբից մինչև վերջ, օգտագործողի գործողությունները պատճենելով:

Տեստեր գրելու համար օգտագործում եմ Mockito կամ MockK կախվածությունների մոկավորման համար և Hamcrest կամ AssertJ հաստատումների համար:

// JUnit 5 և 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`() {
        // Մոկավորում է կախվածությունը
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

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

        // Ստուգում արդյունքը
        assertEquals(30, result)
    }
}

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

interface Dependency {
    fun getValue(): Int
}
// Android-ի UI թեստի օրինակ 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("Տեքստը փոխվեց!")))
    }
}