डिवाइस के सामान्य कॉन्फ़िगरेशन में बदलाव होने पर, अपने ऐप्लिकेशन की जांच करने के लिए, 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" />
gradle.propertiesफ़ाइल में,enableEmulatorControlएक्सपेरिमेंटल फ़्लैग चालू करें:android.experimental.androidTest.enableEmulatorControl=true
मॉड्यूल-लेवल के बिल्ड स्क्रिप्ट में,
emulatorControlविकल्प चालू करें:Kotlin
testOptions { emulatorControl { enable = true } }
शानदार
testOptions { emulatorControl { enable = true } }
मॉड्यूल-लेवल के बिल्ड स्क्रिप्ट में, Espresso Device लाइब्रेरी को अपने प्रोजेक्ट में इंपोर्ट करें:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
शानदार
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() {
...
}