當裝置發生常見的設定變更 (例如旋轉和展開螢幕) 時,請使用 Espresso Device API 測試應用程式。Espresso 裝置 API 可讓您在虛擬裝置上模擬這些設定變更,並同步執行測試,因此一次只會發生一個 UI 動作或判斷,測試結果也更可靠。如果您不熟悉如何使用 Espresso 編寫 UI 測試,請參閱相關說明文件。
如要使用 Espresso 裝置 API,您需要:
- Android Studio Iguana 以上版本
- Android Gradle 外掛程式 8.3 以上版本
- Android Emulator 33.1.10 以上版本
- 搭載 API 級別 24 以上版本的 Android 虛擬裝置
設定 Espresso 裝置 API 的專案
如要設定專案,使其支援 Espresso 裝置 API,請按照下列步驟操作:
如要讓測試將指令傳送至測試裝置,請在
androidTest
來源集的資訊清單檔案中,加入INTERNET
和ACCESS_NETWORK_STATE
權限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.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.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
針對常見的設定變更進行測試
Espresso 裝置 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) ... }
螢幕旋轉後,請確認 UI 是否如預期調整為新的版面配置。
@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() {
...
}