אפשר להשתמש ב-Espresso Device API כדי לבדוק את האפליקציה כשהמכשיר עובר בעיות נפוצות שינויים בתצורה, כגון סיבוב ופריסת מסך. האספרסו Device API מאפשר לדמות את שינויי ההגדרות האלה במכשיר וירטואלי מפעיל את הבדיקות באופן סינכרוני, כך שרק פעולה אחת בממשק המשתמש או טענת נכוֹנוּת (assertion) מתרחשת זמן מסוים, ותוצאות הבדיקה מהימנות יותר. אם זו הפעם הראשונה שאתם כותבים ממשק משתמש בבדיקות של 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.permissions.ACCESS_NETWORK_STATE" />
הפעלת הדגל הניסיוני
enableEmulatorControl
בשדה קובץgradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
הפעלת האפשרות
emulatorControl
ב-build ברמת המודול סקריפט:Kotlin
testOptions { emulatorControl { enable = true } }
מגניב
testOptions { emulatorControl { enable = true } }
בסקריפט ה-build ברמת המודול, מייבאים את ספריית מכשירי Espresso לפרויקט שלך:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.0-beta01") }
מגניב
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.0-beta01' }
בדיקה מול שינויים נפוצים בהגדרות
ל-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() {
...
}