אפשר להשתמש ב-Espresso Device API כדי לבדוק את האפליקציה כשמתבצעים במכשיר שינויים נפוצים בהגדרות, כמו סיבוב ופתיחת המסך. Espresso Device API מאפשר לכם לדמות את השינויים בהגדרות במכשיר וירטואלי, ומריץ את הבדיקות באופן סינכרוני, כך שרק פעולת UI אחת או טענה אחת מתבצעות בכל פעם, ותוצאות הבדיקה מהימנות יותר. אם אתם חדשים בכתיבת בדיקות ממשק משתמש באמצעות Espresso, תוכלו לעיין בתיעוד.
כדי להשתמש ב-Espresso Device API, אתם צריכים:
- Android Studio Iguana או גרסה מתקדמת יותר
- פלאגין של Android Gradle גרסה 8.3 ואילך
- אמולטור Android מגרסה 33.1.10 ואילך
- מכשיר וירטואלי של Android עם רמת API 24 ומעלה
הגדרת הפרויקט ל-Espresso Device API
כדי להגדיר את הפרויקט כך שיתמוך ב-Espresso Device API, מבצעים את הפעולות הבאות:
כדי לאפשר לבדיקה להעביר פקודות למכשיר הבדיקה, מוסיפים את ההרשאות
INTERNETו-ACCESS_NETWORK_STATEלקובץ המניפסט בערכת המקורandroidTest:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
מפעילים את הדגל הניסיוני
enableEmulatorControlבקובץgradle.properties:android.experimental.androidTest.enableEmulatorControl=true
מפעילים את האפשרות
emulatorControlבסקריפט הבנייה ברמת המודול:Kotlin
testOptions { emulatorControl { enable = true } }
מגניב
testOptions { emulatorControl { enable = true } }
בסקריפט build ברמת המודול, מייבאים את ספריית 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() {
...
}