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

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() का इस्तेमाल करके कॉन्टेक्स्ट सेट करना होगा. अगर आपको ऐसा नहीं करना है, तो यह चरण छोड़ दें.

कॉन्टेक्स्ट देने के लिए, JVM पर आधारित 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 का रेफ़रंस दस्तावेज़ देखें.