Kotlin Academy · पाठ

कोरूटीन परीक्षण

suspend फ़ंक्शन का परीक्षण करें

पाठ 4, कुल 4 में से13 चरण

कोरूटीन परीक्षण, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कोरूटीन परीक्षण विशेष क्यों है

कोरूटीन अतुल्यकालिक रूप से चलते हैं और उनमें विलंब हो सकता है। परीक्षणों को नियंत्रित समय और सस्पेंड फ़ंक्शन के पूरा होने तक प्रतीक्षा करने के तरीके की आवश्यकता होती है।

kotlinx-coroutines-test लाइब्रेरी यह सुविधा प्रदान करती है।

परीक्षण लाइब्रेरी जोड़ना

कोरूटीन परीक्षण आर्टिफैक्ट को अपनी परीक्षण निर्भरताओं में जोड़ें।

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

runTest

runTest प्रवेश-बिंदु है। यह कोरूटीन परीक्षण का मुख्य भाग चलाता है और सभी बाल कोरूटीन के पूरे होने तक अपने-आप प्रतीक्षा करता है।

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

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

आभासी समय

runTest के अंदर delay कॉल को आभासी समय का उपयोग करके छोड़ दिया जाता है। क्रम बनाए रखते हुए 10 सेकंड का विलंब तुरंत पूरा हो जाता है।

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

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

समय को हाथ से आगे बढ़ाना

परीक्षण शेड्यूलर आपको advanceTimeBy से समय को सोच-समझकर आगे बढ़ाने और runCurrent से लंबित कार्य चलाने देता है।

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

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

परीक्षण डिस्पैचर

StandardTestDispatcher कोरूटीन को तब तक कतार में रखता है, जब तक आप समय आगे नहीं बढ़ाते। UnconfinedTestDispatcher उन्हें तुरंत चलाता है। अपनी आवश्यक नियंत्रण-क्षमता के आधार पर चुनें।

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

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

डिस्पैचर प्रविष्ट कराना

उत्पादन कोड में Dispatchers.IO को स्थायी रूप से लिखने के बजाय डिस्पैचर स्वीकार करना चाहिए। इसके बाद परीक्षण में परीक्षण डिस्पैचर प्रविष्ट कराया जा सकता है।

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 को बदलना

Android-शैली के कोड के लिए Main डिस्पैचर को Dispatchers.setMain(testDispatcher) से बदलें और बाद में उसे रीसेट करें।

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()

सस्पेंड फ़ंक्शन का परीक्षण

runTest के अंदर सस्पेंड फ़ंक्शन को सीधे कॉल करके उसकी पुष्टि की जा सकती है।

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())
// }

Flows का परीक्षण

किसी Flow से मान प्राप्त करें और उत्सर्जित मानों की पुष्टि करें। Turbine लाइब्रेरी Flow के परीक्षण को विशेष रूप से सरल बनाती है।

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)
// }

चलने योग्य कोरूटीन अंश

परीक्षणों के बाहर runBlocking सस्पेंड कोड को सामान्य main से जोड़ता है। यह उस सस्पेंड फ़ंक्शन को दर्शाता है, जिसका परीक्षण किया जा रहा है।

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

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

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

त्वरित जाँच

एक सस्पेंड फ़ंक्शन delay(5000) को कॉल करता है। runTest का उपयोग करने वाला परीक्षण लगभग तुरंत क्यों पूरा हो जाता है?

पुनरावलोकन

आप कोरूटीन का विश्वसनीय रूप से परीक्षण कर सकते हैं:

  • runTest सस्पेंड कोड चलाता है और बाल कोरूटीन के लिए प्रतीक्षा करता है
  • आभासी समय विलंब को छोड़ देता है; आवश्यकता होने पर समय को हाथ से आगे बढ़ाएँ
  • डिस्पैचर प्रविष्ट कराएँ; setMain/resetMain का उपयोग करें
  • मान प्राप्त करके Flows का परीक्षण करें (या Turbine का उपयोग करें)

इससे परीक्षण पाठ्यक्रम पूरा होता है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “कोरूटीन परीक्षण” पाठ निःशुल्क है?

हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कोरूटीन परीक्षण” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कोरूटीन परीक्षण” में मैं क्या सीखूँगा?

suspend फ़ंक्शन का परीक्षण करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“कोरूटीन परीक्षण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. JUnit5 के साथ परीक्षण लिखना
  2. अभिकथन
  3. MockK के साथ मॉकिंग
  4. कोरूटीन परीक्षण
← Kotlin Academy पर वापस जाएँ