एक नज़र में जानकारी देखने की सुविधा की मदद से यूनिट टेस्टिंग

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

यह एपीआई लाइटवेट है और इसे सेट अप करने में कम समय लगता है. इसलिए, अपने विजेट के अलग-अलग हिस्सों को डेवलप करते समय, टेस्ट-ड्रिवन डेवलपमेंट किया जा सकता है. साथ ही, कोड को फिर से इस्तेमाल करने की सुविधा को बेहतर बनाने के लिए, उन्हें व्यवस्थित किया जा सकता है.

सेटअप

यूनिट टेस्ट लाइब्रेरी का इस्तेमाल करने के लिए ज़रूरी डिपेंडेंसी, यहां दिए गए उदाहरणों में दिखाई गई हैं:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

टेस्ट का स्ट्रक्चर

कोड को फिर से इस्तेमाल करने और यूनिट टेस्टिंग की सुविधा चालू करने के लिए, GlanceAppWidget क्लास के बाहर कंपोज़ेबल फ़ंक्शन व्यवस्थित करें. टेस्ट की जा रही यूनिट को जितना हो सके उतना आसान बनाएं.

provideComposable का इस्तेमाल करके, टेस्ट कंपोज़ेबल को टारगेट किया जा सकता है. साथ ही, onNode या onAllNodes का इस्तेमाल करके, एक या इससे ज़्यादा Glance नोड पर यूनिट टेस्ट चलाए जा सकते हैं.

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

टेस्ट के लिए कॉन्टेक्स्ट और साइज़ सेट करना

अगर आपका कंपोज़ेबल फ़ंक्शन, LocalContext.current() तरीके का इस्तेमाल करके कॉन्टेक्स्ट को पढ़ता है, तो आपको setContext() का इस्तेमाल करके कॉन्टेक्स्ट सेट करना होगा. अगर ऐसा नहीं है, तो यह चरण ज़रूरी नहीं है.

कॉन्टेक्स्ट देने के लिए, जेवीएम पर आधारित किसी भी Android यूनिट टेस्टिंग फ़्रेमवर्क का इस्तेमाल किया जा सकता है. जैसे, Robolectric.

अगर ऐप्लिकेशन बनाने की सुविधा LocalSize को ऐक्सेस करती है, तो टेस्ट में कंपोज़ेबल उपलब्ध कराने से पहले, टेस्ट के लिए सही साइज़ सेट करें. डिफ़ॉल्ट साइज़ 349.dp x 455.dp है. यह Pixel 4 डिवाइस पर पोर्ट्रेट मोड में दिखाए गए 5x4 विजेट के बराबर है.

  • अगर आपका AppWidget sizeMode == Single का इस्तेमाल करता है, तो इसे अपने विजेट की info.xml फ़ाइल में minWidth और minHeight पर सेट किया जा सकता है.
  • अगर आपका AppWidget sizeMode == Exact का इस्तेमाल करता है, तो टेस्ट करने के लिए साइज़ की पहचान उसी तरह की जा सकती है जिस तरह विजेट के लिए साइज़ तय किया जाता है. साथ ही, लैंडस्केप और पोर्ट्रेट साइज़ की पहचान की जा सकती है, जिनमें आपका विजेट दिख सकता है और उनके लिए टेस्ट किया जा सकता है.
  • अगर आपका AppWidget sizeMode == Responsive का इस्तेमाल करता है, तो इसे sizeMode तय करते समय दी गई सूची में से किसी एक साइज़ पर सेट किया जा सकता है.

टेस्ट टाइम आउट की डिफ़ॉल्ट अवधि एक सेकंड होती है. हालांकि, अगर आपके टेस्ट इन्फ़्रास्ट्रक्चर में टाइम आउट की कोई दूसरी अवधि लागू होती है, तो runGlanceAppWidgetUnitTest तरीके में आर्ग्युमेंट के तौर पर, अपनी पसंद के मुताबिक अवधि पास की जा सकती है.

ज़्यादा जानकारी और कोड सैंपल के लिए, runGlanceAppWidgetUnitTest के लिए रेफ़रंस दस्तावेज़ देखें.