אתם יכולים להשתמש ב-Espresso Device API כדי לבדוק את האפליקציה כשהמכשיר עובר שינויים נפוצים בהגדרות, כמו סיבוב והתרחבות המסך. באמצעות Espresso Device API אפשר לדמות את השינויים האלה בהגדרות במכשיר וירטואלי, ולהריץ את הבדיקות באופן סינכרוני. כך מתבצעת רק פעולה אחת או טענת נכוֹנוּת אחת בממשק המשתמש בכל פעם, ותוצאות הבדיקה אמינות יותר. אם אתם רק מתחילים לכתוב בדיקות ממשק משתמש באמצעות Espresso, כדאי לעיין במסמכי העזרה שלה.
כדי להשתמש ב-Espresso Device API, נדרשים הדברים הבאים:
- Android Studio Iguana ואילך
- פלאגין Android Gradle מגרסה 8.3 ואילך
- Android Emulator מגרסה 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
בסקריפט ה-build ברמת המודול:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
בסקריפט ה-build ברמת המודול, מייבאים את ספריית Espresso Device לפרויקט:
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() {
...
}