在设备经历常见配置更改(例如旋转和屏幕展开)时,使用 Espresso Device API 测试您的应用。借助 Espresso Device API,您可以在虚拟设备上模拟这些配置更改并同步执行测试,因此一次只能发生一项界面操作或断言,测试结果更可靠。如果您刚开始使用 Espresso 编写界面测试,请参阅其文档。
如需使用 Espresso Device API,您需要以下各项:
- Android Studio Iguana 或更高版本
- Android Gradle 插件 8.3 或更高版本
- Android 模拟器 33.1.10 或更高版本
- 搭载 API 级别 24 或更高级别的 Android 虚拟设备
针对 Espresso Device API 设置您的项目
要设置您的项目以支持 Espresso Device API,请执行以下操作:
如需让测试将命令传递给测试设备,请将
INTERNET
和ACCESS_NETWORK_STATE
权限添加到androidTest
源代码集内的清单文件:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
在
gradle.properties
文件中启用enableEmulatorControl
实验标志:android.experimental.androidTest.enableEmulatorControl=true
在模块级构建脚本中启用
emulatorControl
选项:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
在模块级构建脚本中,将 Espresso 设备库导入您的项目中:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.0-beta01") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.0-beta01' }
针对常见的配置变更进行测试
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
注解。测试运行程序会自动跳过在不支持被测配置的设备上运行测试。您可以为每个测试或整个测试类添加设备要求规则。
例如,如需指定应仅在支持展开为平面配置的设备上运行测试,请将以下 @RequiresDeviceMode
代码添加到测试中:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}