Middle
Kokius testavimo metodus naudojate Kotlin kodo testavimui?
sobes.tech AI
Atsakymas iš AI
Naudojame šiuos testavimo metodus:
- Vienetinis testavimas: Atlikti atskirų mažų komponentų (funkcijų, klasių) patikrinimą izoliacijoje. Naudoju JUnit 5 arba Spek.
- Integracinis testavimas: Patikrinti kelių komponentų ar sistemų sąveiką.
- Vartotojo sąsajos testavimas: Testuoti vartotojo sąsają realioje įrenginyje arba emuliatoriuje. Android naudoti Espresso arba UI Automator.
- Instrumentinis testavimas: Testavimas, kuris reikalauja vykdymo įrenginyje arba emuliatoriuje. Apima UI ir kai kuriuos integracinius testus.
- End-to-End testavimas: Visos programėlės testavimas nuo pradžios iki pabaigos, imituojant vartotojo veiksmus.
Testų rašymui naudoju Mockito arba MockK priklausomybių mokymui ir Hamcrest arba AssertJ teiginių rašymui:
// Pavyzdys vienetinio testo naudojant JUnit 5 ir 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`() {
// Mokinys priklausomybę
val dependency: Dependency = mockk()
every { dependency.getValue() } returns 10
val service = MyService(dependency)
val result = service.calculateSum(20)
// Patikriname rezultatą
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 testas naudojant 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() {
// Surandame mygtuką pagal id ir paspaudžiame
onView(withId(R.id.button)).perform(click())
// Patikriname, ar TextView tekstas pasikeitė
onView(withId(R.id.textView)).check(matches(withText("Tekstas pakeistas!")))
}
}