टेस्टिंग, ऐप्लिकेशन तैयार करने की प्रक्रिया का ज़रूरी हिस्सा है. आम तौर पर, ऐप्लिकेशन को एम्युलेटर या डिवाइस पर चलाकर, मैन्युअल तरीके से यह पुष्टि की जाती है कि आपका कोड उम्मीद के मुताबिक काम कर रहा है या नहीं. हालांकि, मैन्युअल तरीके से टेस्टिंग में ज़्यादा समय लगता है. साथ ही, इसमें गड़बड़ियां होने की संभावना भी ज़्यादा होती है. इसके अलावा, अलग-अलग साइज़ की स्क्रीन और डिवाइसों पर चलने वाले ऐप्लिकेशन के लिए, मैन्युअल तरीके से टेस्टिंग करना मुश्किल होता है. मैन्युअल तरीके से टेस्टिंग में आने वाली समस्याएं, अक्सर डेवलपमेंट के लिए एक ही डिवाइस का इस्तेमाल करने की वजह से होती हैं. इस वजह से, अलग-अलग फ़ॉर्म फ़ैक्टर वाले अन्य डिवाइसों पर गड़बड़ियां नज़र नहीं आती हैं.
अलग-अलग विंडो और स्क्रीन साइज़ पर रिग्रेशन की पहचान करने के लिए, ऑटोमेटेड टेस्ट लागू करें. इससे यह पुष्टि की जा सकेगी कि अलग-अलग फ़ॉर्म फ़ैक्टर में, आपके ऐप्लिकेशन का व्यवहार और लुक एक जैसा है. ऑटोमेटेड टेस्ट से, समस्याओं की पहचान शुरुआती दौर में ही हो जाती है. इससे, उपयोगकर्ता के अनुभव पर असर डालने वाली समस्याओं का खतरा कम हो जाता है.
किन चीज़ों की टेस्टिंग करनी चाहिए
अलग-अलग स्क्रीन और विंडो साइज़ के लिए यूज़र इंटरफ़ेस (यूआई) डेवलप करते समय, इन दो पहलुओं पर खास ध्यान दें:
- अलग-अलग साइज़ की विंडो पर, कॉम्पोनेंट और लेआउट के विज़ुअल एट्रिब्यूट कैसे अलग-अलग होते हैं
- कॉन्फ़िगरेशन में होने वाले बदलावों के दौरान, स्टेट कैसे सेव रहती है
विज़ुअल एट्रिब्यूट
चाहे अलग-अलग विंडो साइज़ के लिए यूज़र इंटरफ़ेस (यूआई) को पसंद के मुताबिक बनाया गया हो या नहीं, आपको यह पुष्टि करनी चाहिए कि यूज़र इंटरफ़ेस (यूआई) सही तरीके से दिख रहे हैं. कंपैक्ट, मीडियम, और एक्सटेंड की गई चौड़ाई और ऊंचाई को ध्यान में रखें. सुझाए गए ब्रेकपॉइंट के लिए, विंडो साइज़ क्लास देखें.
इसके अलावा, ऐसा हो सकता है कि आपके डिज़ाइन सिस्टम में मौजूद कुछ कॉम्पोनेंट, साइज़ की पाबंदियां बढ़ने पर उम्मीद के मुताबिक रेंडर न हों.
अगर आपके ऐप्लिकेशन में अलग-अलग विंडो साइज़ के लिए अडैप्टिव लेआउट हैं, तो रिग्रेशन से बचने के लिए, ऑटोमेटेड टेस्ट होने चाहिए. उदाहरण के लिए, फ़ोन पर मार्जिन ठीक करने से, टैबलेट पर लेआउट में गड़बड़ियां हो सकती हैं. अपने लेआउट और कॉम्पोनेंट के व्यवहार की पुष्टि करने के लिए, यूज़र इंटरफ़ेस (यूआई) टेस्ट बनाएं. इसके अलावा, लेआउट की विज़ुअल पुष्टि करने के लिए, स्क्रीनशॉट टेस्ट बनाएं.
स्टेट रीस्टोर करना
टैबलेट जैसे डिवाइसों पर चलने वाले ऐप्लिकेशन को, फ़ोन पर चलने वाले ऐप्लिकेशन की तुलना में ज़्यादा बार घुमाया और उनका साइज़ बदला जाता है. इसके अलावा, फ़ोल्ड किए जा सकने वाले डिवाइसों में, डिसप्ले की नई सुविधाएं होती हैं. जैसे, फ़ोल्ड और अनफ़ोल्ड करना. इससे कॉन्फ़िगरेशन में बदलाव हो सकते हैं. कॉन्फ़िगरेशन में होने वाले इन बदलावों के दौरान, आपके ऐप्लिकेशन में स्टेट रीस्टोर करने की सुविधा होनी चाहिए. इसके अलावा, आपको ऐसे टेस्ट लिखने होंगे जिनसे यह पुष्टि हो सके कि आपका ऐप्लिकेशन, स्टेट को सही तरीके से रीस्टोर करता है.
सबसे पहले, यह टेस्ट करें कि कॉन्फ़िगरेशन में बदलाव होने पर, आपका ऐप्लिकेशन क्रैश न हो. पक्का करें कि आपके ऐप्लिकेशन में मौजूद हर यूज़र इंटरफ़ेस (यूआई), घुमाने, साइज़ बदलने या फ़ोल्ड करने के किसी भी कॉम्बिनेशन को हैंडल कर सके. कॉन्फ़िगरेशन में होने वाले बदलावों की वजह से, ऐक्टिविटी डिफ़ॉल्ट रूप से फिर से बनती है. इसलिए, ऐक्टिविटी के बने रहने की मान्यताओं की वजह से कुछ क्रैश होते हैं.
कॉन्फ़िगरेशन में होने वाले बदलावों की टेस्टिंग के कई तरीके हैं. हालांकि, ज़्यादातर मामलों में, टेस्टिंग के दो तरीके हैं:
- Compose में,
StateRestorationTesterका इस्तेमाल करके, ऐक्टिविटी को रीस्टार्ट किए बिना, कॉन्फ़िगरेशन में होने वाले बदलाव को सिम्युलेट करें. ज़्यादा जानकारी के लिए, यह सेक्शन देखें. - Espresso या Compose जैसे किसी भी यूज़र इंटरफ़ेस (यूआई) टेस्ट में,
Activity.recreate()को कॉल करके, कॉन्फ़िगरेशन में होने वाले बदलाव को सिम्युलेट करें.
आम तौर पर, कॉन्फ़िगरेशन में होने वाले बदलावों के जवाब में, स्टेट रीस्टोर करने की सुविधा की टेस्टिंग के लिए, अलग-अलग डिवाइसों का इस्तेमाल करने की ज़रूरत नहीं होती. ऐसा इसलिए, क्योंकि कॉन्फ़िगरेशन में होने वाले सभी बदलावों का असर एक जैसा होता है. इन बदलावों की वजह से, ऐक्टिविटी फिर से बनती है. हालांकि, कॉन्फ़िगरेशन में होने वाले कुछ बदलावों की वजह से, कुछ डिवाइसों पर स्टेट रीस्टोर करने के अलग-अलग तरीके ट्रिगर हो सकते हैं.
उदाहरण के लिए, जब कोई उपयोगकर्ता, फ़ोल्ड किए जा सकने वाले डिवाइस पर लिस्ट-डिटेल यूज़र इंटरफ़ेस (यूआई) देख रहा हो और वह डिवाइस को फ़ोल्ड करके, सामने वाले डिसप्ले पर स्विच करता है, तो आम तौर पर यूज़र इंटरफ़ेस (यूआई), डिटेल पेज पर स्विच हो जाता है. ऑटोमेटेड टेस्ट में, यूज़र इंटरफ़ेस (यूआई) स्टेट के इस रीस्टोरेशन को शामिल किया जाना चाहिए. इसमें नेविगेशन स्टेट भी शामिल है.
डिवाइसों के एक डिसप्ले से दूसरे डिसप्ले पर जाने या मल्टी-विंडो मोड में जाने पर, कॉन्फ़िगरेशन में होने वाले बदलावों की टेस्टिंग के लिए, आपके पास कई विकल्प हैं:
- किसी भी डिवाइस का इस्तेमाल करके, टेस्ट के दौरान स्क्रीन का साइज़ बदलें. ज़्यादातर मामलों में, इससे स्टेट रीस्टोर करने के वे सभी तरीके ट्रिगर होते हैं जिनकी आपको पुष्टि करनी होती है. हालांकि, यह टेस्ट, फ़ोल्ड किए जा सकने वाले डिवाइसों में खास पोज़िशन का पता लगाने वाले लॉजिक के लिए काम नहीं करेगा. ऐसा इसलिए, क्योंकि पोज़िशन में होने वाले बदलावों से, कॉन्फ़िगरेशन में कोई बदलाव ट्रिगर नहीं होता.
- किसी ऐसे डिवाइस या एम्युलेटर का इस्तेमाल करके, उन सुविधाओं से जुड़े कॉन्फ़िगरेशन में होने वाले बदलावों को ट्रिगर करें जिनकी आपको टेस्टिंग करनी है. उदाहरण के लिए, Espresso Device का इस्तेमाल करके, फ़ोल्ड किए जा सकने वाले डिवाइस या टैबलेट को लैंडस्केप में फ़ोल्ड से पूरी तरह से खोले जाने की स्थिति में ले जाया जा सकता है. अलग-अलग स्क्रीन साइज़ की टेस्टिंग के उदाहरणों के लिए, लाइब्रेरी और टूल में Espresso Device सेक्शन देखें.
अलग-अलग स्क्रीन और विंडो साइज़ के लिए टेस्ट के टाइप
हर इस्तेमाल के उदाहरण के लिए, टेस्ट का सही टाइप इस्तेमाल करें. इससे यह पुष्टि की जा सकेगी कि अलग-अलग फ़ॉर्म फ़ैक्टर में टेस्ट सही तरीके से काम कर रहा है या नहीं:
यूज़र इंटरफ़ेस (यूआई) के व्यवहार की टेस्टिंग में, ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) का कोई हिस्सा लॉन्च किया जाता है. जैसे, किसी ऐक्टिविटी का डिसप्ले. टेस्ट से यह पुष्टि की जाती है कि कुछ एलिमेंट मौजूद हैं या उनके खास एट्रिब्यूट हैं . टेस्ट में, उपयोगकर्ता की कार्रवाइयों को सिम्युलेट किया जा सकता है. हालांकि, यह ज़रूरी नहीं है. व्यू के लिए, Espresso का इस्तेमाल करें. Jetpack Compose के पास, टेस्टिंग के अपने एपीआई हैं. यूज़र इंटरफ़ेस (यूआई) के व्यवहार की टेस्टिंग, इंस्ट्रूमेंटेड या लोकल हो सकती है. इंस्ट्रूमेंटेड टेस्ट, डिवाइसों या एम्युलेटर पर चलते हैं. वहीं, लोकल यूज़र इंटरफ़ेस (यूआई) टेस्ट, JVM पर Robolectric पर चलते हैं.
यूज़र इंटरफ़ेस (यूआई) के व्यवहार की टेस्टिंग का इस्तेमाल करके, यह पुष्टि करें कि नेविगेशन का ऐप्लिकेशन में सही तरीके से इस्तेमाल किया गया है. टेस्ट में, क्लिक और स्वाइप जैसी कार्रवाइयां की जाती हैं. यूज़र इंटरफ़ेस (यूआई) के व्यवहार की टेस्टिंग में, कुछ एलिमेंट या प्रॉपर्टी की मौजूदगी की भी जांच की जाती है. ज़्यादा जानकारी के लिए, यूज़र इंटरफ़ेस (यूआई) टेस्ट को ऑटोमेट करना देखें.
स्क्रीनशॉट टेस्ट में, यूज़र इंटरफ़ेस (यूआई) या कॉम्पोनेंट का स्क्रीनशॉट लिया जाता है. इसके बाद, इमेज की तुलना पहले से मंज़ूर किए गए स्क्रीनशॉट से की जाती है. यह रिग्रेशन से बचने का बहुत असरदार तरीका है. ऐसा इसलिए, क्योंकि एक स्क्रीनशॉट में बड़ी संख्या में एलिमेंट और उनकी विज़ुअल प्रॉपर्टी शामिल हो सकती हैं. स्क्रीनशॉट टेस्ट, JVM या डिवाइसों पर चलाए जा सकते हैं. स्क्रीनशॉट टेस्ट के कई फ़्रेमवर्क उपलब्ध हैं. ज़्यादा जानकारी के लिए, स्क्रीनशॉट टेस्ट देखें.
आखिर में, आपको लॉजिक की उन यूनिट की फ़ंक्शनैलिटी की टेस्टिंग के लिए यूनिट टेस्ट की ज़रूरत पड़ सकती है जो डिवाइस या विंडो साइज़ के हिसाब से अलग-अलग तरीके से काम करती हैं. हालांकि, इस मामले में यूनिट टेस्ट कम ही किए जाते हैं.
अगले चरण
इस दस्तावेज़ में शामिल जांचों को लागू करने के तरीके के बारे में ज़्यादा जानकारी के लिए, लाइब्रेरी और टूल देखें.