Sobes.tech
Junior — Middle

Kotlinдеги асинхрондук кодду сынап көрүү контекстинде runBlockingTest, runTest жана runBlocking функцияларынын колдонулушу кандай айырмаланат?

sobes.tech AI

AIден жооп

Kotlinде асинхрон кодду тестирлөө үчүн, тесттерде корутиндерди башкарууга жардам берген ар кандай функциялар колдонулат:

  • runBlocking — корутинди баштайт жана анын аяктоосуна чейин учурдагы агымды блоктойт. Жалпы коддо жана тесттерде корутиндерди баштоо үчүн колдонулат, бирок тесттер үчүн оптималдуу эмес, анткени ал агымды блоктойт.

  • runBlockingTest — kotlinx-coroutines-test китепканасынан эскирген функция, ал тест контекстинде убакытты көзөмөлдөө (таймерлер менен) менен корутинди иштетет. Ал кечиктирүүлөрдү жана тайм-ауттарды чындыкта күтпөстөн тестирлөөгө мүмкүндүк берет. Азыр ал runTest менен алмаштырылган.

  • runTest — заманбап ыкма, ал виртуалдуу убакыт менен тест контекстин камсыз кылат. Ал асинхрондук кодду иштетүүгө, кечиктирүүлөрдү жана тайм-ауттарды көзөмөлдөөгө, тесттерди тездетүүгө жана аныкталган кылууга мүмкүндүк берет.

runTest колдонуу мисалы:

import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.delay
import kotlin.test.Test
import kotlin.test.assertEquals

class ExampleTest {
    @Test
    fun testDelay() = runTest {
        var result = 0
        val job = launch {
            delay(1000)
            result = 42
        }
        advanceTimeBy(1000) // виртуалдуу убакытты алдыга жылдырабыз
        job.join()
        assertEquals(42, result)
    }
}

Ошондуктан, заманбап асинхрон кодду тестирлөө үчүн runTest колдонуу сунушталат, анткени ал көбүрөөк ийкемдүү жана эффективдүү.