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

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 यूनिट टेस्टिंग फ़्रेमवर्क, जैसे कि Roboletric का इस्तेमाल किया जा सकता है.

अगर आपका कंपोज़ेबल फ़ंक्शन 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 का रेफ़रंस दस्तावेज़ देखें.