Middle
Какви методи за тестване използвате за тестване на кода на Kotlin?
sobes.tech AI
Отговор от AI
Използвам следните методи за тестване:
- Unit тестове: Проверка на отделни малки компоненти (функции, класове) в изолация. Използвам JUnit 5 или Spek.
- Интеграционно тестване: Проверка на взаимодействието между няколко компонента или подсистеми.
- UI тестване: Тестиране на потребителския интерфейс на реално устройство или емулатор. За Android използвам Espresso или UI Automator.
- Инструментално тестване: Тестване, което изисква изпълнение на устройство или емулатор. Включва UI и някои видове интеграционно тестване.
- Крайно (End-to-End) тестване: Тестиране на цялото приложение от началото до края, имитиращо действията на потребителя.
За писане на тестове използвам Mockito или MockK за мокиране на зависимости и Hamcrest или AssertJ за писане на твърдения.
// Пример за Unit тест с използване на 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
}
// Пример за UI тест за Android с помощта на 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("Текст изменен!")))
}
}