Sobes.tech
Junior

Китобхонаҳои тестиро дар Kotlin кадомҳоянд?

sobes.tech AI

Ҷавоб аз AI

  • JUnit 5: Фреймворк стандарти барои озмоиши воҳидӣ дар JVM. Ман онро барои зиёда аз ҳама озмоишҳои воҳидӣ истифода мебарам.

  • MockK: Китобхона барои моккунии объектҳо ва рафторҳо. Барои сохтани мокҳо, стабҳо ва тасдиқи ҳамкориҳо муфид аст.

  • Kotest: Фреймворки бисёрфунксионалӣ барои озмоишҳо, ки услубҳои гуногуни навишти озмоишҳоро дастгирӣ мекунад (Spec, WordSpec, StringSpec ва ғайра). Ман онро барои навиштани озмоишҳои бештар баёнӣ ва сохторӣ истифода мебарам.

  • Truth: Китобхона барои эҷоди иддаоҳои хонданӣ (assertions). Озмоишҳоро бештар фаҳмо мекунад.

  • Robolectric: Фреймворк барои озмоиши барномаҳои Android бе дастгоҳи виртуалӣ ё эмулятор. Мавзеи Android-ро дар JVM имитатсия мекунад.

  • Espresso: Фреймворки аз Google барои озмоиши интерфейси корбар дар Android. Ман онро барои озмоишҳои интегратсионӣ ва UI дар лоиҳаҳои Android истифода мебарам.

Маслиҳат барои истифодаи MockK:

// Импорт кардани синфҳо зарурӣ
import io.mockk.*
import org.junit.jupiter.api.Test

// Синфи намуна, ки мо озмоиш мекунем
class MyService(private val dependency: Dependency) {
    fun processData(data: String): String {
        val processed = dependency.process(data)
        return "Result: $processed"
    }
}

// Синфи вобастагӣ, ки мо мок мекунем
interface Dependency {
    fun process(input: String): String
}

class MyServiceTest {

    @Test
    fun testProcessData() {
        // Сохтани мок вобастагӣ
        val mockDependency = mockk<Dependency>()

        // Тартиби рафтори мокро муайян мекунем
        every { mockDependency.process("input") } returns "processed_data"

        // Сохтани намунаи синф бо мок
        val myService = MyService(mockDependency)

        // Даъво кардани усули озмоишӣ
        val result = myService.processData("input")

        // Санҷидани натиҷа
        assert(result == "Result: processed_data")

        // Санҷидани он, ки усули мок бо аргументи интизорӣ даъват шудааст
        verify { mockDependency.process("input") }
    }
}