از Espresso Device API برای تست برنامه خود در زمانی که دستگاه دستخوش تغییرات پیکربندی رایج، مانند چرخش و باز شدن صفحه نمایش میشود، استفاده کنید. Espresso Device API به شما امکان میدهد این تغییرات پیکربندی را روی یک دستگاه مجازی شبیهسازی کنید و تستهای خود را به صورت همزمان اجرا کنید، بنابراین فقط یک اقدام یا ادعای رابط کاربری در یک زمان اتفاق میافتد و نتایج تست شما قابل اعتمادتر است. اگر در نوشتن تستهای رابط کاربری با Espresso تازهکار هستید، به مستندات آن مراجعه کنید.
برای استفاده از رابط برنامهنویسی کاربردی (API) دستگاه اسپرسو، به موارد زیر نیاز دارید:
- اندروید استودیو ایگوانا یا بالاتر
- افزونه اندروید Gradle نسخه ۸.۳ یا بالاتر
- شبیهساز اندروید ۳۳.۱.۱۰ یا بالاتر
- دستگاه مجازی اندروید که API سطح ۲۴ یا بالاتر را اجرا میکند
پروژه خود را برای رابط برنامهنویسی کاربردی (API) دستگاه اسپرسو تنظیم کنید
برای تنظیم پروژه خود به گونهای که از Espresso Device API پشتیبانی کند، موارد زیر را انجام دهید:
برای اینکه تست، دستورات را به دستگاه تست ارسال کند، مجوزهای
INTERNETوACCESS_NETWORK_STATEبه فایل manifest در مجموعه منابع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را در اسکریپت ساخت سطح ماژول فعال کنید:کاتلین
testOptions { emulatorControl { enable = true } }
گرووی
testOptions { emulatorControl { enable = true } }
در اسکریپت ساخت سطح ماژول، کتابخانه Espresso Device را به پروژه خود وارد کنید:
کاتلین
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
گرووی
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
آزمایش در برابر تغییرات پیکربندی رایج
رابط برنامهنویسی کاربردی (API) دستگاه اسپرسو (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)
آزمایشی ایجاد کنید که در حین اجرای آزمایش، جهت دستگاه را به حالت افقی (landscape) تنظیم کند:
@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 استفاده کنید. اجراکنندهی آزمایش به طور خودکار از اجرای آزمایشها روی دستگاههایی که از پیکربندی مورد آزمایش پشتیبانی نمیکنند، صرف نظر میکند. میتوانید قانون نیاز دستگاه را به هر آزمایش یا کل کلاس آزمایش اضافه کنید.
برای مثال، برای اینکه مشخص کنید یک تست فقط باید روی دستگاههایی اجرا شود که از پیکربندی تخت (flat) برای باز شدن پشتیبانی میکنند، کد @RequiresDeviceMode زیر را به تست خود اضافه کنید:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}