Jetpack Compose Academy · पाठ

ViewModels और Flows का testing

test dispatchers के साथ logic का unit test कीजिए।

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

ViewModels और Flows का testing, CoddyKit पर Jetpack Compose Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Jetpack Compose Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Jetpack Compose Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

UI के बिना तर्क का परीक्षण करें

ViewModel आपकी स्क्रीन का तर्क संभालता है, इसलिए आप plain JUnit से सीधे उसका परीक्षण कर सकते हैं। एम्युलेटर या रेंडरिंग की आवश्यकता नहीं होती, जिससे ये परीक्षण तेज़ रहते हैं। ⚡

व्यवस्थित करें, क्रिया करें, अभिकथन करें

ViewModel परीक्षण एक सरल क्रम का पालन करते हैं: ViewModel बनाएँ, कोई फ़ंक्शन चलाएँ, फिर नई स्थिति पर अभिकथन करें। हर परीक्षण को एक व्यवहार पर केंद्रित रखें।

val vm = CounterViewModel()
vm.increment()
assertEquals(1, vm.count)

Coroutine की चुनौती

कई ViewModels ऐसे coroutine शुरू करते हैं जो Dispatchers.Main पर चलते हैं। परीक्षणों में मुख्य लूपर नहीं होता, इसलिए आपको इसके स्थान पर एक परीक्षण डिस्पैचर लगाना होगा।

StandardTestDispatcher

StandardTestDispatcher आपको coroutine के समय पर पूरा नियंत्रण देता है। कार्य कतार में जमा होते हैं और तभी चलते हैं जब आप आभासी घड़ी को आगे बढ़ाते हैं।

val dispatcher = StandardTestDispatcher()

मुख्य डिस्पैचर बदलें

हर परीक्षण से पहले अपने परीक्षण डिस्पैचर को लगाने के लिए Dispatchers.setMain का उपयोग करें, फिर वैश्विक स्थिति को स्वच्छ रखने के लिए बाद में resetMain चलाएँ।

Dispatchers.setMain(dispatcher)

runTest

निलंबित परीक्षण बॉडी को runTest के अंदर रखें। यह आभासी घड़ी वाला coroutine दायरा देता है, इसलिए विलंब वास्तविक सेकंडों में नहीं, तुरंत हल हो जाते हैं।

@Test fun loads() = runTest {
    // suspend calls run here
}

त्वरित जाँच

आपका ViewModel मुख्य डिस्पैचर पर coroutine शुरू करता है। यूनिट परीक्षण को उनके निष्पादन पर नियंत्रण कौन देता है?

घड़ी को आगे बढ़ाना

StandardTestDispatcher के साथ कतार में रखे गए coroutine प्रतीक्षा करते हैं। उन्हें सभी चलाने के लिए runTest के अंदर advanceUntilIdle चलाएँ, फिर अंतिम स्थिति जाँचें।

advanceUntilIdle()
assertEquals(Loaded, vm.uiState.value)

StateFlow का परीक्षण

ViewModels अक्सर एक StateFlow उपलब्ध कराते हैं। इसका वर्तमान स्नैपशॉट .value में रहता है, इसलिए घड़ी आगे बढ़ाने के बाद आप उसे सीधे पढ़ और जाँच सकते हैं।

assertEquals(0, vm.count.value)

Flow उत्सर्जनों को एकत्र करना

उत्सर्जनों का क्रम कैप्चर करने के लिए Turbine लाइब्रेरी awaitItem के माध्यम से Flow परीक्षण को आसान बनाती है और प्रत्येक मान के आते ही उसका अभिकथन करती है।

vm.events.test {
    assertEquals(Saved, awaitItem())
}

निर्भरताओं का नकली रूप बनाएँ

ऐसा नकली रिपॉज़िटरी डालें जो पहले से तय डेटा लौटाती हो। इससे परीक्षण तेज़ रहते हैं और वास्तविक नेटवर्क के बिना सफलता तथा त्रुटि के अलग-अलग मार्गों का अनुकरण किया जा सकता है।

val vm = NewsViewModel(FakeRepo())

स्वच्छ समापन

समापन प्रक्रिया में हमेशा setMain के साथ resetMain भी चलाएँ। परीक्षण डिस्पैचर को लगा हुआ छोड़ने से वह अन्य परीक्षणों तक पहुँच सकता है और उन्हें विफल कर सकता है।

@After fun tearDown() {
    Dispatchers.resetMain()
}

पुनरावलोकन: ViewModels और Flows

परीक्षण डिस्पैचर लगाकर, runTest में कोड चलाकर और StateFlow मानों पर अभिकथन करके UI के बिना तर्क का परीक्षण करें। तेज़, केंद्रित और विश्वसनीय परीक्षण। 🏁

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

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

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

पाठ्यक्रम
30
पाठ
120

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

क्या “ViewModels और Flows का testing” पाठ निःशुल्क है?

हाँ—“ViewModels और Flows का testing” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Jetpack Compose Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Jetpack Compose Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“ViewModels और Flows का testing” में मैं क्या सीखूँगा?

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

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

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

“ViewModels और Flows का testing” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. createComposeRule और Finders
  2. Assertions और Actions करना
  3. Semantics और Test Tags
  4. ViewModels और Flows का testing
← Jetpack Compose Academy पर वापस जाएँ