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

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.