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
जैसी ऐसी सुविधाओं पर भरोसा करने पर भी डिवाइस टेस्ट की ज़रूरत होगी जो काम नहीं करती हैं.