डिवाइस के कॉन्फ़िगरेशन में सामान्य बदलाव होने पर, अपने ऐप्लिकेशन की जांच करने के लिए Espresso Device API का इस्तेमाल करें. जैसे, स्क्रीन का घूमना और खुलना. Espresso Device API की मदद से, वर्चुअल डिवाइस पर कॉन्फ़िगरेशन में किए गए इन बदलावों को सिम्युलेट किया जा सकता है. साथ ही, यह आपके टेस्ट को एक साथ एक्ज़ीक्यूट करता है. इसलिए, एक बार में सिर्फ़ एक यूज़र इंटरफ़ेस (यूआई) ऐक्शन या पुष्टि होती है. इससे आपके टेस्ट के नतीजे ज़्यादा भरोसेमंद होते हैं. अगर आपको Espresso का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) टेस्ट लिखने के बारे में ज़्यादा जानकारी नहीं है, तो इसका दस्तावेज़ देखें.
Espresso Device API का इस्तेमाल करने के लिए, आपके पास ये चीज़ें होनी चाहिए:
- Android Studio Iguana या इसके बाद का वर्शन
- Android Gradle प्लग इन 8.3 या इसके बाद का वर्शन
- Android Emulator 33.1.10 या इसके बाद का वर्शन
- Android का वर्चुअल डिवाइस, जो एपीआई लेवल 24 या इसके बाद के वर्शन पर काम करता हो
Espresso Device API के लिए अपना प्रोजेक्ट सेट अप करना
अपने प्रोजेक्ट को इस तरह सेट अप करें कि वह Espresso Device API के साथ काम कर सके. इसके लिए, यह तरीका अपनाएं:
टेस्ट को टेस्ट डिवाइस पर कमांड भेजने की अनुमति देने के लिए,
androidTest
सोर्स सेट में मेनिफ़ेस्ट फ़ाइल मेंINTERNET
औरACCESS_NETWORK_STATE
अनुमतियां जोड़ें:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
enableEmulatorControl
फ़ाइल मेंenableEmulatorControl
एक्सपेरिमेंट फ़्लैग चालू करें:gradle.properties
android.experimental.androidTest.enableEmulatorControl=true
मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में
emulatorControl
विकल्प चालू करें:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
मॉड्यूल-लेवल की बिल्ड स्क्रिप्ट में, Espresso Device library को अपने प्रोजेक्ट में इंपोर्ट करें:
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 में स्क्रीन ओरिएंटेशन और फ़ोल्ड करने की कई स्थितियां होती हैं. इनका इस्तेमाल करके, डिवाइस के कॉन्फ़िगरेशन में होने वाले बदलावों को सिम्युलेट किया जा सकता है.
स्क्रीन घुमाने की सुविधा के ख़िलाफ़ टेस्ट करना
यहां एक उदाहरण दिया गया है. इससे यह पता लगाया जा सकता है कि डिवाइस की स्क्रीन घूमने पर, आपके ऐप्लिकेशन पर क्या असर पड़ता है:
सबसे पहले, डिवाइस को पोर्ट्रेट मोड पर सेट करें, ताकि एक जैसी शुरुआती स्थिति हो:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
ऐसा टेस्ट बनाएं जो टेस्ट के दौरान डिवाइस को लैंडस्केप ओरिएंटेशन पर सेट करता हो:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
स्क्रीन रोटेट होने के बाद, देखें कि यूज़र इंटरफ़ेस (यूआई) नए लेआउट के हिसाब से काम कर रहा है या नहीं.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
स्क्रीन खुलने पर टेस्ट करना
यहां एक उदाहरण दिया गया है, जिसमें यह बताया गया है कि फ़ोल्ड किए जा सकने वाले डिवाइस पर ऐप्लिकेशन के खुले होने के दौरान स्क्रीन को अनफ़ोल्ड करने पर, ऐप्लिकेशन पर क्या असर पड़ता है:
सबसे पहले, डिवाइस को फ़ोल्ड करके
onDevice().setClosedMode()
पर कॉल करके देखें. पक्का करें कि आपके ऐप्लिकेशन का लेआउट, छोटी स्क्रीन की चौड़ाई के हिसाब से अडजस्ट हो जाता हो.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
पूरी तरह से खुले हुए मोड पर जाने के लिए,
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() {
...
}