با API دستگاه Espresso در برابر تغییرات پیکربندی صفحه آزمایش کنید

از API دستگاه اسپرسو برای آزمایش برنامه خود در زمانی که دستگاه دچار تغییرات پیکربندی رایجی مانند چرخش و باز شدن صفحه می شود، استفاده کنید. Espresso Device API به شما امکان می‌دهد این تغییرات پیکربندی را در یک دستگاه مجازی شبیه‌سازی کنید و آزمایش‌های شما را به صورت همزمان اجرا کند، بنابراین تنها یک اقدام یا ادعای UI در یک زمان اتفاق می‌افتد و نتایج آزمایش شما قابل اعتمادتر است. اگر در نوشتن تست های رابط کاربری با اسپرسو تازه کار هستید، به مستندات آن مراجعه کنید.

برای استفاده از API دستگاه اسپرسو، به موارد زیر نیاز دارید:

  • Android Studio Iguana یا بالاتر
  • پلاگین اندروید Gradle 8.3 یا بالاتر
  • شبیه ساز اندروید 33.1.10 یا بالاتر
  • دستگاه مجازی Android که API سطح 24 یا بالاتر را اجرا می کند

پروژه خود را برای API دستگاه اسپرسو تنظیم کنید

برای تنظیم پروژه خود به گونه ای که از 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 را در اسکریپت ساخت سطح ماژول فعال کنید:

    کاتلین

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    شیار

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. در اسکریپت ساخت سطح ماژول، کتابخانه دستگاه اسپرسو را به پروژه خود وارد کنید:

    کاتلین

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1")
      }
      

    شیار

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1'
      }
      

تست در برابر تغییرات رایج پیکربندی

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 استفاده کنید. دونده آزمایشی به طور خودکار از آزمایش‌های در حال اجرا روی دستگاه‌هایی که پیکربندی مورد آزمایش را پشتیبانی نمی‌کنند، صرفنظر می‌کند. می‌توانید قانون نیاز دستگاه را به هر آزمون یا کل کلاس آزمایشی اضافه کنید.

به عنوان مثال، برای تعیین اینکه یک آزمایش فقط باید در دستگاه‌هایی اجرا شود که از unfolding به یک پیکربندی مسطح پشتیبانی می‌کنند، کد @RequiresDeviceMode زیر را به تست خود اضافه کنید:

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}