रोबोलेक्टिक रणनीतियां

Robolectric एक ओपन-सोर्स फ़्रेमवर्क है, जिसे Google मैनेज करता है. इसकी मदद से, JVM में सिम्युलेट किए गए Android एनवायरमेंट में टेस्ट चलाए जा सकते हैं. इसके लिए, आपको किसी एमुलेटर की ज़रूरत नहीं पड़ती और न ही आपको कोई समस्या आती है. यह Lollipop (एपीआई लेवल 21) के बाद के सभी Android वर्शन पर काम करता है.

कई बड़े प्रोजेक्ट, अपनी जांच की स्पीड और भरोसे को बढ़ाने के लिए Robolectric का इस्तेमाल करते हैं. साथ ही, रीयल डिवाइसों या एमुलेटर पर जांच करने से जुड़े खर्च को कम करते हैं. इसमें Google के ज़्यादातर ऐप्लिकेशन शामिल हैं, जो Robolectric पर काफ़ी निर्भर हैं.

Robolectric पूरी तरह से एम्युलेटर का इस्तेमाल नहीं कर सकता, क्योंकि यह सभी सुविधाओं और एपीआई के साथ काम नहीं करता. उदाहरण के लिए, Robolectric में एमुलेटर की तरह स्क्रीन नहीं होती. साथ ही, कुछ एपीआई सिर्फ़ कुछ हद तक काम करते हैं. हालांकि, यह Android के ज़रूरत के मुताबिक हिस्सों को एमुलेट करता है, ताकि यूनिट टेस्ट और ज़्यादातर यूज़र इंटरफ़ेस (यूआई) टेस्ट को भरोसेमंद तरीके से चलाया जा सके.

रणनीतियां आज़माएं

Robolectric की मदद से, टेस्टिंग की दो तरह की रणनीतियां अपनाई जा सकती हैं: यूनिट जांच और यूज़र इंटरफ़ेस (यूआई) जांच.

यूनिट टेस्टिंग

Robolectric को Android ऐप्लिकेशन में "यूनिट टेस्टिंग" की सुविधा चालू करने के लिए बनाया गया था. उदाहरण के लिए, किसी ऐक्टिविटी के लॉन्च को सिम्युलेट किया जा सकता है और लाइफ़साइकल के सभी तरीकों को कॉल करके, उसमें मौजूद लॉजिक की जांच की जा सकती है.

यूनिट जांच के लिए, Robolectric के फ़ेक (जिन्हें शैडो कहा जाता है) का इस्तेमाल भी डिपेंडेंसी के तौर पर किया जा सकता है. उदाहरण के लिए, अगर आपकी क्लास बंडल का इस्तेमाल करती है या आपको नकली ब्लूटूथ कनेक्शन चाहिए.

आम तौर पर, अगर आपने टेस्ट किया जा सकने वाला आर्किटेक्चर लागू किया है, तो आपको यूनिट टेस्टिंग के लिए Robolectric का इस्तेमाल करने की ज़रूरत नहीं है. ऐसा इसलिए, क्योंकि आपके कोड को अलग से टेस्ट किया जा सकता है और इसमें Android फ़्रेमवर्क पर कोई डिपेंडेंसी नहीं होनी चाहिए.

यूज़र इंटरफ़ेस (यूआई) की जांच करना

Robolectric, Espresso या Compose टेस्ट जैसे यूज़र इंटरफ़ेस (यूआई) टेस्ट भी चला सकता है. इंस्ट्रुमेंट किए गए टेस्ट को Robolectric में बदला जा सकता है. इसके लिए, आपको उसे test सोर्स सेट में ले जाना होगा और Robolectric की डिपेंडेंसी सेट अप करनी होगी.

android {
  testOptions {
    unitTests {
      isIncludeAndroidResources = true
    }
  }
}

dependencies {
  testImplementation("junit:junit:4.13.2")
  testImplementation("org.robolectric:robolectric:4.13")
}

test सोर्स सेट में मौजूद कोई भी यूज़र इंटरफ़ेस (यूआई) टेस्ट, Robolectric के साथ चलता है.

import androidx.test.espresso.Espresso.onView

@RunWith(AndroidJUnit4::class)
class AddContactActivityTest {
    @Test
    fun inputTextShouldBeRetainedAfterActivityRecreation() {
        // GIVEN
        val contactName = "Test User"
        val scenario = ActivityScenario.launchActivity<AddContactActivity>()

        // WHEN
        // Enter contact name
        onView(withId(R.id.contact_name_text))
            .perform(typeText(contactName))
        // Destroy and recreate Activity
        scenario.recreate()

        // THEN
        // Check contact name was preserved.
        onView(withId(R.id.contact_name_text))
            .check(matches(withText(contactName)))
     }
}

ज़्यादातर यूज़र इंटरफ़ेस (यूआई) टेस्ट, फ़्रेमवर्क से इंटरैक्ट नहीं करते. इसलिए, उन्हें Robolectric पर चलाया जा सकता है. Robolectric पर व्यवहार टेस्ट किया जा सकता है, क्योंकि इसके लिए फ़िडेलिटी की ज़रूरत बहुत ज़्यादा है. उदाहरण के लिए, जब Compose टेस्ट यह पुष्टि करता है कि किसी बटन पर क्लिक करने के बाद यूज़र इंटरफ़ेस (यूआई) बदल गया है.

Robolectric की मदद से, यूज़र इंटरफ़ेस (यूआई) की अन्य जांच की जा सकती है. जैसे, स्क्रीनशॉट टेस्ट. हालांकि, अलग-अलग डिवाइसों पर स्क्रीन थोड़ा अलग तरीके से रेंडर होती हैं, इसलिए फ़िडेलिटी कम होती है.

आपको यह तय करना होगा कि हर इस्तेमाल के उदाहरण के लिए, Robolectric को लागू करना सही है या नहीं. हालांकि, यहां कुछ सुझाव दिए गए हैं:

  • कॉम्पोनेंट, फ़ीचर या ऐप्लिकेशन की जांच के लिए, अलग-अलग यूज़र इंटरफ़ेस (यूआई) के व्यवहार की जांच करने के लिए, Robolectric का इस्तेमाल करें. आम तौर पर, ये टेस्ट यूज़र इंटरफ़ेस (यूआई) के स्टेट मैनेजमेंट और व्यवहार की जांच करते हैं और बाहरी डिपेंडेंसी के साथ इंटरैक्ट नहीं करते.
  • पिक्सल सटीक न होने पर स्क्रीनशॉट लेने के लिए, Robolectric का इस्तेमाल करें. उदाहरण के लिए, यह जांचने के लिए कि कोई कॉम्पोनेंट अलग-अलग फ़ॉन्ट साइज़ या थीम के हिसाब से कैसे काम करता है.

ध्यान दें: Robolectric, स्क्रीनशॉट अपने-आप ले सकता है. हालांकि, इसके साथ स्क्रीनशॉट की जांच करने के लिए, आपको तीसरे पक्ष की लाइब्रेरी की ज़रूरत होगी.

Robolectric बनाम डिवाइस टेस्ट

खास जानकारी के तौर पर, Robolectric ज़्यादातर यूज़र इंटरफ़ेस (यूआई) टेस्ट चलाने के लिए ज़रूरत के मुताबिक फ़िडेलिटी देता है. हालांकि, कुछ मामलों में अब भी डिवाइस टेस्ट की ज़रूरत होगी. उदाहरण के लिए, वे टेस्ट जो सिस्टम यूज़र इंटरफ़ेस से जुड़े हों, जैसे कि एज-टू-एज या पिक्चर में पिक्चर. इसके अलावा, WebView जैसी ऐसी सुविधाओं पर भरोसा करने पर भी डिवाइस टेस्ट की ज़रूरत होगी जो काम नहीं करती हैं.