Espresso Device API की मदद से, स्क्रीन कॉन्फ़िगरेशन में हुए बदलावों की जांच करें

जब डिवाइस में कॉन्फ़िगरेशन में सामान्य बदलाव होते हैं, जैसे कि स्क्रीन घुमाना और स्क्रीन को फ़ोल्ड करना, तो अपने ऐप्लिकेशन की जांच करने के लिए Espresso Device API का इस्तेमाल करें. Espresso Device API की मदद से, वर्चुअल डिवाइस पर कॉन्फ़िगरेशन में किए गए इन बदलावों को सिम्युलेट किया जा सकता है. साथ ही, यह आपके टेस्ट को एक साथ चलाता है, ताकि एक समय पर सिर्फ़ एक यूज़र इंटरफ़ेस (यूआई) ऐक्शन या एश्योरेशन हो और आपके टेस्ट के नतीजे ज़्यादा भरोसेमंद हों. अगर आपने Espresso की मदद से यूज़र इंटरफ़ेस (यूआई) जांच करने के लिए कोड नहीं लिखा है, तो इसका दस्तावेज़ देखें.

Espresso Device API का इस्तेमाल करने के लिए, आपके पास ये चीज़ें होनी चाहिए:

  • Android Studio Iguana या इसके बाद का वर्शन
  • Android Gradle प्लग इन 8.3 या इसके बाद का वर्शन
  • Android Emulator 33.1.10 या इसके बाद का वर्शन
  • एपीआई लेवल 24 या उसके बाद के वर्शन पर चलने वाला Android वर्चुअल डिवाइस

Espresso Device API के लिए अपना प्रोजेक्ट सेट अप करना

अपने प्रोजेक्ट को Espresso Device API के साथ काम करने के लिए सेट अप करने के लिए, यह तरीका अपनाएं:

  1. टेस्ट को टेस्ट डिवाइस पर निर्देश भेजने की अनुमति देने के लिए, androidTest सोर्स सेट में मौजूद मेनिफ़ेस्ट फ़ाइल में INTERNET और ACCESS_NETWORK_STATE अनुमतियां जोड़ें:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
  2. gradle.properties फ़ाइल में, enableEmulatorControl एक्सपेरिमेंटल फ़्लैग को चालू करें:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में emulatorControl विकल्प चालू करें:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Groovy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में, अपने प्रोजेक्ट में Espresso डिवाइस लाइब्रेरी को इंपोर्ट करें:

    Kotlin

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1")
      }
      

    Groovy

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1'
      }
      

कॉन्फ़िगरेशन में आम तौर पर होने वाले बदलावों के लिए जांच करना

Espresso Device API में, स्क्रीन के कई ओरिएंटेशन और फ़ोल्ड किए जा सकने वाले डिवाइस की कई स्थितियां होती हैं. इनका इस्तेमाल, डिवाइस के कॉन्फ़िगरेशन में होने वाले बदलावों को सिम्युलेट करने के लिए किया जा सकता है.

स्क्रीन के रोटेट होने के हिसाब से जांच करना

डिवाइस की स्क्रीन घूमने पर, आपके ऐप्लिकेशन पर क्या असर पड़ता है, यह जांचने का तरीका यहां बताया गया है:

  1. सबसे पहले, डिवाइस को पोर्ट्रेट मोड पर सेट करें, ताकि हर बार एक जैसी शुरुआत हो:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. ऐसा टेस्ट बनाएं जो टेस्ट के दौरान डिवाइस को लैंडस्केप ओरिएंटेशन पर सेट करता हो:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. स्क्रीन के घूमने के बाद, देखें कि यूज़र इंटरफ़ेस (यूआई) नए लेआउट में सही तरीके से काम कर रहा है या नहीं.

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

स्क्रीन के फ़ोल्ड होने के दौरान जांच करना

यहां एक उदाहरण दिया गया है, जिसमें यह जांचने का तरीका बताया गया है कि अगर आपका ऐप्लिकेशन फ़ोल्ड किए जा सकने वाले डिवाइस पर है और स्क्रीन को फ़ोल्ड किया जाता है, तो क्या होगा:

  1. सबसे पहले, डिवाइस को फ़ोल्ड करके, onDevice().setClosedMode() को कॉल करके जांच करें. पक्का करें कि आपके ऐप्लिकेशन का लेआउट, स्क्रीन की छोटी चौड़ाई के हिसाब से हो.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. पूरी तरह से फ़ोल्ड आउट करने के लिए, onDevice().setFlatMode() को कॉल करें. देखें कि ऐप्लिकेशन का लेआउट, बड़े किए गए साइज़ क्लास के हिसाब से सही है या नहीं.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

यह बताएं कि आपके टेस्ट के लिए किन डिवाइसों की ज़रूरत है

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

उदाहरण के लिए, यह बताने के लिए कि किसी टेस्ट को सिर्फ़ उन डिवाइसों पर चलाया जाना चाहिए जो फ़्लैट कॉन्फ़िगरेशन में बदलने की सुविधा देते हैं, अपने टेस्ट में यह @RequiresDeviceMode कोड जोड़ें:

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}