از API دستگاه اسپرسو برای آزمایش برنامه خود در زمانی که دستگاه دچار تغییرات پیکربندی رایجی مانند چرخش و باز شدن صفحه می شود، استفاده کنید. Espresso Device API به شما امکان میدهد این تغییرات پیکربندی را در یک دستگاه مجازی شبیهسازی کنید و آزمایشهای شما را به صورت همزمان اجرا کند، بنابراین تنها یک اقدام یا ادعای UI در یک زمان اتفاق میافتد و نتایج آزمایش شما قابل اعتمادتر است. اگر در نوشتن تست های رابط کاربری با اسپرسو تازه کار هستید، به مستندات آن مراجعه کنید.
برای استفاده از API دستگاه اسپرسو، به موارد زیر نیاز دارید:
- Android Studio Iguana یا بالاتر
- پلاگین اندروید Gradle 8.3 یا بالاتر
- شبیه ساز اندروید 33.1.10 یا بالاتر
- دستگاه مجازی Android که API سطح 24 یا بالاتر را اجرا می کند
پروژه خود را برای API دستگاه اسپرسو تنظیم کنید
برای تنظیم پروژه خود به گونه ای که از API دستگاه اسپرسو پشتیبانی کند، موارد زیر را انجام دهید:
برای اجازه دادن به دستورات تست به دستگاه آزمایشی، مجوزهای
INTERNET
وACCESS_NETWORK_STATE
را به فایل مانیفست در مجموعه منبع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 } }
در اسکریپت ساخت سطح ماژول، کتابخانه دستگاه اسپرسو را به پروژه خود وارد کنید:
کاتلین
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
شیار
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
تست در برابر تغییرات رایج پیکربندی
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
استفاده کنید. دونده آزمایشی به طور خودکار از آزمایشهای در حال اجرا روی دستگاههایی که پیکربندی مورد آزمایش را پشتیبانی نمیکنند، صرفنظر میکند. میتوانید قانون نیاز دستگاه را به هر آزمون یا کل کلاس آزمایشی اضافه کنید.
به عنوان مثال، برای تعیین اینکه یک آزمایش فقط باید در دستگاههایی اجرا شود که از unfolding به یک پیکربندی مسطح پشتیبانی میکنند، کد @RequiresDeviceMode
زیر را به تست خود اضافه کنید:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}