Middle
Koje metode testiranja koristite za testiranje koda na Kotlinu?
sobes.tech АИ
Одговор од АИ
Koristim sledeće metode testiranja:
- Jedinično testiranje: Provera pojedinačnih malih komponenti (funkcija, klasa) u izolaciji. Koristim JUnit 5 ili Spek.
- Integraciono testiranje: Provera interakcije između više komponenti ili podsistema.
- UI testiranje: Testiranje korisničkog interfejsa na pravom uređaju ili emulatoru. Za Android koristim Espresso ili UI Automator.
- Instrumentaciono testiranje: Testiranje koje zahteva izvršavanje na uređaju ili emulatoru. Uključuje UI i neke vrste integracionog testiranja.
- End-to-End testiranje: Testiranje cele aplikacije od početka do kraja, simulirajući korisničke radnje.
Za pisanje testova koristim Mockito ili MockK za mockovanje zavisnosti i Hamcrest ili AssertJ za pisanje tvrdnji.
// Primer jedinicnog testa koristeći JUnit 5 i 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`() {
// Mocks dependency
val dependency: Dependency = mockk()
every { dependency.getValue() } returns 10
val service = MyService(dependency)
val result = service.calculateSum(20)
// Proveravamo rezultat
assertEquals(30, result)
}
}
class MyService(private val dependency: Dependency) {
fun calculateSum(a: Int): Int {
return a + dependency.getValue()
}
}
interface Dependency {
fun getValue(): Int
}
// Primer UI testa za Android koristeći 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() {
// Pronalazimo dugme po id i klikćemo na njega
onView(withId(R.id.button)).perform(click())
// Proveravamo da se tekst u TextView promenio
onView(withId(R.id.textView)).check(matches(withText("Tekst promenjen!")))
}
}