कैसे करें
Compose टेस्ट में आइडलिंग रिसॉर्स के विकल्प: waitUntil एपीआई (अपडेट किया गया)
तीन मिनट में पढ़ें
इस लेख में, Compose में waitUntil टेस्ट एपीआई का इस्तेमाल करने का तरीका बताया गया है. इससे कुछ शर्तों के पूरा होने तक इंतज़ार किया जा सकता है. कुछ मामलों में, आइडलिंग रिसॉर्स का इस्तेमाल करने के बजाय इसका इस्तेमाल करना बेहतर होता है.
[2023 का अपडेट] खास जानकारी: Compose टेस्ट (v1.4.0+) में सिंक करने के लिए, नए waitUntil एपीआई का इस्तेमाल करें.
सिंक्रनाइज़ेशन क्या होता है?
टेस्ट को उनके स्कोप के हिसाब से कैटगरी में बांटा जा सकता है. छोटी जांचों या यूनिट टेस्ट में, आपके ऐप्लिकेशन के छोटे-छोटे हिस्सों पर फ़ोकस किया जाता है. वहीं, बड़ी जांचों या एंड-टू-एंड टेस्ट में, आपके ऐप्लिकेशन के ज़्यादातर हिस्से को कवर किया जाता है. इस बारे में और अन्य तरह की जांचों के बारे में जानने के लिए, जांच से जुड़े नए दस्तावेज़ पढ़ें.
इमेज को फ़ुल साइज़ में देखने के लिए, Enter दबाएं या क्लिक करें
सिंक्रनाइज़ेशन एक ऐसा तरीका है जिससे टेस्ट को यह पता चलता है कि अगला ऑपरेशन कब चलाना है. पुष्टि करने के लिए कोड का जितना बड़ा हिस्सा चुना जाएगा, उसे टेस्ट के साथ सिंक करना उतना ही मुश्किल होगा. यूनिट टेस्ट में, कोड के एक्ज़ीक्यूशन को पूरी तरह से कंट्रोल करना आसान होता है, ताकि उसकी पुष्टि की जा सके. हालांकि, ज़्यादा क्लास, मॉड्यूल, और लेयर शामिल करने पर, टेस्ट फ़्रेमवर्क के लिए यह पता लगाना मुश्किल हो जाता है कि ऐप्लिकेशन किसी ऑपरेशन के बीच में है या नहीं.
इमेज को फ़ुल साइज़ में देखने के लिए, Enter दबाएं या क्लिक करें
androidx.test और Compose Test, कुछ ऐसे तरीके इस्तेमाल करते हैं जिनकी वजह से आपको इस बारे में ज़्यादा चिंता करने की ज़रूरत नहीं पड़ती. उदाहरण के लिए, अगर मुख्य थ्रेड व्यस्त है, तो टेस्ट तब तक रुक जाता है, जब तक वह अगली लाइन को लागू नहीं कर सकता.
हालांकि, उन्हें हर चीज़ के बारे में पता नहीं होता. उदाहरण के लिए, अगर बैकग्राउंड थ्रेड में डेटा लोड किया जाता है, तो टेस्ट फ़्रेमवर्क अगले ऑपरेशन को बहुत जल्द लागू कर सकता है. इससे आपका टेस्ट फ़ेल हो जाएगा. सबसे खराब स्थिति तब होती है, जब ऐसा सिर्फ़ कुछ समय के लिए होता है. इससे टेस्ट भरोसेमंद नहीं रहता.
पहला विकल्प: आइडलिंग रिसॉर्स
Idling Resources, Espresso की एक सुविधा है. इससे डेवलपर यह तय कर सकता है कि ऐप्लिकेशन कब व्यस्त है. इनका इस्तेमाल दो तरीकों से किया जा सकता है:
1. उन्हें ऐसे फ़्रेमवर्क या लाइब्रेरी में इंस्टॉल करना जो ऐसा काम कर रही है जिसे टेस्ट नहीं देख सकता.
इसका एक अच्छा उदाहरण RxIdler है, जो RxJava शेड्यूलर को रैप करता है. आइडलिंग रिसॉर्स रजिस्टर करने का यह सबसे सही तरीका है. इससे, टेस्ट कोड से टेस्ट सेटअप को अलग रखा जा सकता है.
2. टेस्ट किए जा रहे कोड में बदलाव करके, यह जानकारी साफ़ तौर पर देना कि आपका ऐप्लिकेशन व्यस्त है या नहीं.
उदाहरण के लिए, डेटा सोर्स से डेटा लोड करते समय, यह दिखाने के लिए कि रिपॉज़िटरी व्यस्त है, अपनी रिपॉज़िटरी (या टेस्ट डबल) में बदलाव किया जा सकता है:
यह तरीका सही नहीं है, क्योंकि इससे आपके प्रोडक्शन कोड में गड़बड़ी हो सकती है या टेस्ट डबल बनाना मुश्किल हो सकता है. साथ ही, कुछ मामलों में इन्हें इंस्टॉल करना मुश्किल होता है. उदाहरण के लिए, Kotlin फ़्लो में Idling Resources का इस्तेमाल कैसे किया जाएगा? आखिरी अपडेट कौन-सा है?
इसके बजाय, हम चीज़ों के लिए इंतज़ार कर सकते हैं.
दूसरा विकल्प: गलत तरीके से इंतज़ार करना
डेटा लोड होने में आम तौर पर कम समय लगता है. खास तौर पर, नकली डेटा का इस्तेमाल करते समय. इसलिए, जब टेस्ट को कुछ सेकंड के लिए स्लीप मोड में रखा जा सकता है, तो आइडल रिसॉर्स के साथ समय क्यों बर्बाद करना?
इस टेस्ट को ज़रूरत से ज़्यादा समय लगेगा या यह पूरा नहीं होगा. जब आपके पास सैकड़ों या हज़ारों यूज़र इंटरफ़ेस (यूआई) टेस्ट होते हैं, तो आपको टेस्ट को जल्द से जल्द पूरा करना होता है.
इसके अलावा, कभी-कभी एम्युलेटर या डिवाइस ठीक से काम नहीं करते हैं और उनमें गड़बड़ी होती है. इस वजह से, ऑपरेशन पूरा होने में 2000 मि॰से॰ से ज़्यादा समय लगता है और आपका बिल्ड टूट जाता है. अगर आपके पास सैकड़ों टेस्ट हैं, तो यह एक बड़ी समस्या बन जाती है.
तीसरा विकल्प: सही तरीके से इंतज़ार करना!
अगर आपको यह पता लगाने के लिए कि आपका कोड कब व्यस्त है, तो टेस्ट किए जा रहे कोड में बदलाव नहीं करना है, तो आपके पास एक और विकल्प है. इसके तहत, आपको किसी तय समय तक इंतज़ार करने के बजाय, किसी शर्त के पूरा होने तक इंतज़ार करना होगा.
Compose में, waitUntil फ़ंक्शन का इस्तेमाल किया जा सकता है. यह एक ऐसा फ़ंक्शन है जो एक बूलियन वैल्यू जनरेट करता है.
22/03/2023 का अपडेट: Compose 1.4.0 से, हमने waitUntil एपीआई का एक नया सेट जोड़ा है:
[Before 1.4.0: Use these helpers: waitUntilExists, waitUntilNodeCount]
…और उनका इस्तेमाल इस तरह करें:
इन एपीआई का इस्तेमाल सिर्फ़ तब करें, जब आपको यूज़र इंटरफ़ेस (यूआई) के साथ अपने टेस्ट को सिंक करना हो. हर टेस्ट स्टेटमेंट को सिंक्रनाइज़ करने से, टेस्ट कोड में ज़रूरत से ज़्यादा डेटा आ जाता है. इससे उसे बनाए रखना मुश्किल हो जाता है.
ऐसे में, आपको इसका इस्तेमाल कब करना चाहिए? इसका सबसे अच्छा इस्तेमाल, किसी ऑब्ज़र्वेबल (LiveData, Kotlin Flow या RxJava के साथ) से डेटा लोड करना है. अगर आपके यूज़र इंटरफ़ेस (यूआई) को कई अपडेट मिलने के बाद ही आइडल माना जाता है, तो waitUntil का इस्तेमाल करके सिंक्रनाइज़ेशन को आसान बनाया जा सकता है.
उदाहरण के लिए, जब किसी व्यू से फ़्लो इकट्ठा किया जाता है, तब:
इसके बाद, इसमें एक से ज़्यादा आइटम भेजे जाते हैं:
अगर repository को पहला नतीजा दिखाने में बहुत ज़्यादा समय लगता है, तो टेस्ट फ़्रेमवर्क यह मान लेगा कि “Loading” आइडल स्टेट है (collectAsState में असाइन की गई शुरुआती वैल्यू). इसके बाद, वह अगले स्टेटमेंट पर चला जाएगा.
इसलिए, अगर आपको टेस्ट को ज़्यादा भरोसेमंद बनाना है, तो पक्का करें कि यूज़र इंटरफ़ेस (यूआई) में लोडिंग इंडिकेटर न दिख रहा हो:
हैप्पी… थोड़ा इंतज़ार करें… टेस्टिंग!
कोड स्निपेट का लाइसेंस:
Copyright 2022 Google LLC. SPDX-License-Identifier: Apache-2.0
पढ़ना जारी रखें
-
कैसे करें
इस पोस्ट में, हम कुछ और दिलचस्प चीज़ों के बारे में जानेंगे. जैसे, कैमरे की झलक के ऊपर स्पॉटलाइट इफ़ेक्ट लागू करना. इसके लिए, चेहरे का पता लगाने की सुविधा का इस्तेमाल करना.
Jolanda Verhoef • आठ मिनट में पढ़ें
-
कैसे करें
चाहे Android Studio में Gemini का इस्तेमाल किया जा रहा हो, Gemini CLI का, Antigravity का या Claude Code या Codex जैसे तीसरे पक्ष के एजेंट का, हमारा मकसद यह पक्का करना है कि हर जगह बेहतरीन क्वालिटी के Android ऐप्लिकेशन बनाए जा सकें.
Adarsh Fernando, Esteban de la Canal • 4 मिनट में पढ़ें
-
कैसे करें
Google को पता है कि Android उपयोगकर्ताओं के लिए, बैटरी का ज़्यादा खर्च होना एक बड़ी समस्या है. इसलिए, Google ने डेवलपर की मदद करने के लिए कई अहम कदम उठाए हैं, ताकि वे कम बैटरी खर्च करने वाले ऐप्लिकेशन बना सकें.
Alice Yuan • आठ मिनट में पढ़ें
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.