בדיקה מול שינויים בהגדרות המסך באמצעות Espresso Device API

אפשר להשתמש ב-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, צריך לבצע את הפעולות הבאות:

  1. כדי לאפשר לפקודות של מעבר הבדיקה למכשיר הבדיקה, מוסיפים את הרשאות INTERNET ו-ACCESS_NETWORK_STATE בקובץ המניפסט בקבוצת המקור androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. הפעלת הדגל הניסיוני enableEmulatorControl בשדה קובץ gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. הפעלת האפשרות emulatorControl ב-build ברמת המודול סקריפט:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    מגניב

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. בסקריפט ה-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 יש כמה כיוון מסך ומצבים מתקפלים שמאפשרים שאפשר להשתמש בהם כדי לדמות שינויים בהגדרות האישיות של המכשיר.

בדיקה מול סיבוב המסך

הנה דוגמה לאופן שבו אפשר לבדוק מה קורה לאפליקציה כשמסך המכשיר מסתובב:

  1. קודם כל, כדי לשמור על מצב התחלה עקבי, יש להגדיר את המכשיר לאורך מצב:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. יצירת בדיקה שמגדירה את המכשיר לכיוון לרוחב במהלך הבדיקה ביצוע:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. לאחר סיבוב המסך, בודקים שממשק המשתמש מתאים את עצמו לפריסה החדשה כצפוי.

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

בדיקה כנגד פריסת מסך

הנה דוגמה לאופן שבו אפשר לבדוק מה קורה לאפליקציה אם היא במכשיר מתקפל במכשיר והמסך מתקפל:

  1. קודם כול צריך לבדוק את המכשיר במצב מקופל על ידי התקשרות onDevice().setClosedMode() חשוב לוודא שפריסת האפליקציה התאמה לרוחב המסך הקומפקטי.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. כדי לעבור למצב לא מקופל, צריך להתקשר 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() {
  ...
}