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("Տեքստը փոխվեց!")))
}
}