projectedtestrule، مدیریت دستگاه مجازی
وقتی کد به سختافزار فیزیکی وابسته است، خودکارسازی تستها دشوار است. برای مثال، ممکن است لازم باشد دستگاه فیزیکی را به صورت دستی متصل و جدا کنید تا وضعیت اتصال را تأیید کنید. با وجود انواع ، قابلیتها و وضعیتهای مختلف دستگاه عینکهای صوتی و عینکهای نمایشگر، این چالش میتواند پیچیدهتر هم شود. برای آزمایش این مجموعه متنوع از موارد، از APIهای قانون تست پیشبینیشده برای خودکارسازی راهاندازی و مدیریت یک محیط تست پیشبینیشده استفاده کنید. این کتابخانه، ایجاد دستگاه پیشبینیشده، وضعیتهای اتصال و تأیید قابلیت را مدیریت میکند، بنابراین میتوانید روی آزمایش منطق اصلی برنامه خود تمرکز کنید. از این APIها برای ساخت مجموعههای تست قوی بدون نوشتن کد تکراری استفاده کنید.
اضافه کردن وابستگیهای کتابخانهای
برای استفاده از قانون تست، مصنوع تست را به فایل build.gradle برنامه خود اضافه کنید:
گرووی
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
کاتلین
dependencies {
// JXR Projected testing library
testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}
تنظیم قانون تست
برای تنظیم قانون تست اولیه، قانون را در کلاس تست خود حاشیهنویسی کنید. به طور پیشفرض، این قانون یک دستگاه نمایش داده شده را متصل میکند و قابلیتهای بصری آن را قبل از اجرای هر تست فعال میکند.
@get:Rule val projectedTestRule = ProjectedTestRule() private val context: Context get() = ApplicationProvider.getApplicationContext() @Test fun testWithConnectedDevice() { val projectedContext = ProjectedContext.createProjectedDeviceContext(context) assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue() }
سناریوهای رایج دیگر را آزمایش کنید
اکنون که محیط تست پیشبینیشده خود را با یک قانون تست اولیه تنظیم کردهاید، سناریوهای رایج دیگر را برای عینکهای صوتی و عینکهای نمایشی آزمایش کنید تا عملکرد برنامه خود را تأیید کنید.
قطع اتصال دستگاه را آزمایش کنید
برای آزمایش نحوه واکنش برنامه شما هنگام قطع اتصال با عینک، از ویژگی isDeviceConnected استفاده کنید:
@Test fun testDeviceDisconnection() { // manually disconnect the device via the rule projectedTestRule.isDeviceConnected = false assertThrows(IllegalStateException::class.java) { ProjectedContext.createProjectedDeviceContext(context) } }
نکات کلیدی در مورد کد
- این قانون، ویژگیهایی مانند
isDeviceConnectedرا قبل از هر تست به مقادیر پیشفرضشان بازنشانی میکند. نیازی نیست که این ویژگیها را به صورت دستی در متدهای@Afterبازنشانی کنید.
قابلیتهای دستگاههای مختلف را آزمایش کنید
عینکهای نمایشی میتوانند رابطهای کاربری ساخته شده با Jetpack Compose Glimmer را نمایش دهند. به طور پیشفرض، ProjectedTestRule CAPABILITY_VISUAL_UI را فعال میکند. برای تعریف دقیق آنچه دستگاه نمایش داده شده پشتیبانی میکند، از مجموعه capabilities تعیین شده استفاده کنید. این برای تأیید اینکه برنامه شما قبل از تلاش برای نمایش محتوا به عینک، به درستی پشتیبانی سختافزار را بررسی میکند، مفید است.
@Test fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity -> // disable display capability projectedTestRule.capabilities = setOf() runBlocking { // create the controller val controller = ProjectedDeviceController.create(activity) // verify the app recognizes the lack of visual UI support assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI) } }
نکات کلیدی در مورد کد
- این قانون، ویژگیهایی مانند
capabilitiesرا قبل از هر تست به حالت پیشفرض خود برمیگرداند. نیازی نیست که این ویژگیها را به صورت دستی در متدهای@Afterتنظیم مجدد کنید. - وقتی نیاز دارید رفتار را به طور خاص برای فعالیتی که قرار است عینک را نمایش دهد، تأیید کنید،
launchTestProjectedDeviceActivityاستفاده کنید.