از Espresso Device API برای آزمایش برنامه خود هنگام تغییرات پیکربندی رایج دستگاه، مانند چرخش و باز شدن صفحه، استفاده کنید. Espresso Device API ابزار پیشنهادی برای شبیهسازی اقدامات سطح دستگاه در کنار قوانین تست Jetpack Compose شماست. اگر در نوشتن تستهای رابط کاربری برای Jetpack Compose تازهکار هستید، به بخش «تست طرحبندی Compose» مراجعه کنید.
رابط برنامهنویسی کاربردی دستگاه Espresso به شما امکان میدهد تغییرات پیکربندی را روی یک دستگاه مجازی شبیهسازی کنید و تستهای خود را به صورت همزمان اجرا کنید، بنابراین فقط یک اقدام یا ادعای رابط کاربری در یک زمان اتفاق میافتد و نتایج تست شما قابل اعتمادتر است. اگر در نوشتن تستهای رابط کاربری با 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' }
آزمایش در برابر تغییرات پیکربندی رایج
رابط برنامهنویسی کاربردی دستگاه اسپرسو (Espresso Device API) دارای چندین حالت جهتگیری صفحه نمایش و حالتهای تاشو است که میتوانید از آنها برای شبیهسازی تغییرات پیکربندی دستگاه استفاده کنید. مثالهای زیر نحوهی فعالسازی این حالتهای دستگاه و تأیید تغییرات رابط کاربری حاصل با استفاده از قوانین تست Compose را نشان میدهند.
تست چرخش صفحه نمایش
در اینجا مثالی از نحوه آزمایش اینکه هنگام چرخش صفحه دستگاه چه اتفاقی برای برنامه شما میافتد، آورده شده است:
ابتدا، قانون تست Compose خود را تعریف کنید و دستگاه را روی یک حالت شروع ثابت (مانند حالت عمودی) تنظیم کنید:
import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertDoesNotExist import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.test.espresso.device.EspressoDevice.onDevice import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule import org.junit.Rule import org.junit.Test class MyConfigurationTest { // 1. Define the Compose test rule @get:Rule val composeTestRule = createComposeRule() // 2. Define the Espresso Device rule for a consistent starting state @get:Rule val screenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT) }آزمایشی ایجاد کنید که در حین اجرای آزمایش، جهت دستگاه را به حالت افقی (landscape) تنظیم کند:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }پس از چرخش صفحه، از
composeTestRuleبرای بررسی انطباق composableهای خود با وضعیت جدید طبق انتظار استفاده کنید.@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").assertIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assertDoesNotExist() ... }برای انتقال به حالت کاملاً باز شده، متد
onDevice().setFlatMode()را فراخوانی کنید. بررسی کنید که composableها با کلاس اندازه باز شده سازگار شوند.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
مشخص کنید که آزمایشهای شما به چه دستگاههایی نیاز دارند
اگر در حال اجرای آزمایشی هستید که اقدامات تا شدن را روی دستگاهی انجام میدهد که تاشو نیست، احتمالاً آزمایش با شکست مواجه خواهد شد. برای اجرای فقط آزمایشهایی که مربوط به دستگاه در حال اجرا هستند، از حاشیهنویسی @RequiresDeviceMode استفاده کنید. اجراکنندهی آزمایش به طور خودکار از اجرای آزمایشها روی دستگاههایی که از پیکربندی مورد آزمایش پشتیبانی نمیکنند، صرف نظر میکند. میتوانید قانون نیاز دستگاه را به هر آزمایش یا کل کلاس آزمایش اضافه کنید.
برای مثال، برای اینکه مشخص کنید یک تست فقط باید روی دستگاههایی اجرا شود که از پیکربندی تخت (flat) برای باز شدن پشتیبانی میکنند، کد @RequiresDeviceMode زیر را به تست خود اضافه کنید:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}