Sobes.tech
Back to questions
Middle
172
questionbank

Какие методы тестирования вы применяете для тестирования кода на Kotlin?

Sobes Copilot

Get answers in real time

Answer from AI

sobes.tech 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("Текст изменен!")))
    }
}