0Pricing
Kotlin Academy · Ders

Korutin Testi

Askıya alınabilir işlevleri test edin

Korutin Testi, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Korutin testleri neden özeldir?

Korutinler eşzamansız çalışır ve gecikmeler kullanabilir. Testlerin denetimli zamana ve askıya alınabilir işlevlerin tamamlanmasını bekleyecek bir yönteme ihtiyacı vardır.

kotlinx-coroutines-test kitaplığı tam olarak bunu sağlar.

Test kitaplığını ekleme

Korutin test bileşenini test bağımlılıklarınız arasına ekleyin.

dependencies {
    testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1")
}

runTest

runTest başlangıç noktasıdır. Bir korutin test gövdesini çalıştırır ve tüm alt korutinlerin tamamlanmasını otomatik olarak bekler.

import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test

class FetchTest {
    @Test
    fun fetches() = runTest {
        // suspend calls allowed here
    }
}

Sanal zaman

runTest içinde delay çağrıları sanal zaman kullanılarak atlanır. 10 saniyelik bir gecikme, sıralama korunarak anında tamamlanır.

import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runTest

// runTest {
//     delay(10_000) // returns immediately
// }

Zamanı elle ilerletme

Test zamanlayıcısı, advanceTimeBy ile zamanı bilinçli olarak ilerletmenize ve runCurrent ile bekleyen işleri çalıştırmanıza olanak tanır.

import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent

// runTest {
//     launch { delay(1000); println("done") }
//     advanceTimeBy(1000)
//     runCurrent()
// }

Test dağıtıcıları

StandardTestDispatcher, siz zamanı ilerletene kadar korutinleri kuyruğa alır. UnconfinedTestDispatcher ise onları hemen çalıştırır. İhtiyacınız olan denetime göre seçim yapın.

import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.UnconfinedTestDispatcher

val standard = StandardTestDispatcher()
val unconfined = UnconfinedTestDispatcher()

Dağıtıcı enjekte etme

Üretim kodu, Dispatchers.IO değerini sabitlemek yerine bir dağıtıcı kabul etmelidir. Böylece testler bir test dağıtıcısı enjekte edebilir.

import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

class Service(private val io: CoroutineDispatcher = Dispatchers.IO) {
    suspend fun load(): String = withContext(io) { "data" }
}

Dispatchers.Main'i değiştirme

Android tarzı kodlarda Main dağıtıcısını Dispatchers.setMain(testDispatcher) ile değiştirin ve ardından sıfırlayın.

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.test.setMain
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.StandardTestDispatcher

// Dispatchers.setMain(StandardTestDispatcher())
// ... test ...
// Dispatchers.resetMain()

Askıya alınabilir işlevi test etme

Askıya alınabilir bir işlev, runTest içinde doğrudan çağrılabilir ve doğrulanabilir.

import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions.assertEquals

suspend fun compute(): Int { delay(1000); return 42 }

// @Test fun computes() = runTest {
//     assertEquals(42, compute())
// }

Akışları test etme

Bir Flow toplayın ve yayılan değerleri doğrulayın. Turbine kitaplığı, akış testlerini özellikle temiz ve anlaşılır hale getirir.

import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions.assertEquals

// @Test fun emits() = runTest {
//     val values = flowOf(1, 2, 3).toList()
//     assertEquals(listOf(1, 2, 3), values)
// }

Çalıştırılabilir korutin kod parçacığı

Testlerin dışında runBlocking, askıya alınabilir kodu normal bir main işlevine bağlar. Bu, test edilen askıya alınabilir işlevi gösterir.

import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.delay

suspend fun compute(): Int { delay(100); return 42 }

fun main() = runBlocking {
    println(compute())
}

Hızlı kontrol

Bir askıya alınabilir işlev delay(5000) çağırıyor. runTest kullanan bir test neden neredeyse anında tamamlanır?

Özet

Korutinleri güvenilir şekilde test edebilirsiniz:

  • runTest askıya alınabilir kodu çalıştırır ve alt korutinleri bekler
  • Sanal zaman gecikmeleri atlar; gerektiğinde zamanı elle ilerletin
  • Dağıtıcıları enjekte edin; setMain/resetMain kullanın
  • Akışları toplayarak (veya Turbine ile) test edin

Test kursu burada tamamlanıyor.

Sıkça Sorulan Sorular

“Korutin Testi” dersi ücretsiz mi?

Evet — “Korutin Testi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Korutin Testi” dersinde ne öğreneceğim?

Askıya alınabilir işlevleri test edin Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Korutin Testi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. JUnit5 ile Test Yazma
  2. Doğrulamalar
  3. MockK ile Taklitler
  4. Korutin Testi
← Kotlin Academy Sayfasına Dön