測試 Compose 版面配置

測試應用程式的 UI,驗證 Compose 程式碼的行為是否正確。這可讓您及早發現錯誤,並改善應用程式品質。

Compose 提供一組測試 API,用於尋找元素、驗證其屬性,以及執行使用者動作。這些 API 也包含時間操控等進階功能。您可以利用這些 API 建立完善的測試,以便驗證應用程式行為。

觀看次數

如果您使用檢視區塊,而非 Compose,請參閱一般「在 Android 上測試應用程式」一節。

建議您先參閱「自動化 UI 測試」指南。本文說明如何自動執行在裝置上執行的測試,包括使用檢視畫面。

核心概念

以下是測試 Compose 程式碼的一些重要概念。

  • 語意:Compose 測試會使用語意與 UI 互動,藉此為 UI 的各個部分提供含意,並一併產生 UI 階層結構。
  • 測試 API:Compose 提供測試 API,可用於尋找元素、對其狀態和屬性做出斷言,並執行動作來模擬使用者互動。
  • 同步處理:根據預設,Compose 測試會自動與 UI 同步處理,在發出斷言或執行動作之前,先等待測試處於閒置狀態。
  • 互通性:在混合型應用程式中,測試能與 Compose 和以 View 為基礎的元素完美互動,並與其他測試架構整合。

測試一覽表

如需您應瞭解 Compose 測試的所有重要主題總覽,請參閱測試一覽表

設定

設定應用程式,以便測試 Compose 程式碼。

首先,請將下列依附元件新增至包含 UI 測試的模組的 build.gradle 檔案:

// Test rules and transitive dependencies:
androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
// Needed for createComposeRule(), but not for createAndroidComposeRule<YourActivity>():
debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

此模組包含 ComposeTestRule 以及名為 AndroidComposeTestRule 的 Android 實作。透過這項規則,您可以設定 Compose 內容或存取活動。您可使用工廠函式 createComposeRule 建立規則;如需存取活動,可使用 createAndroidComposeRule。Compose 的一般 UI 測試如下所示:

// file: app/src/androidTest/java/com/package/MyComposeTest.kt

class MyComposeTest {

    @get:Rule val composeTestRule = createComposeRule()
    // use createAndroidComposeRule<YourActivity>() if you need access to
    // an activity

    @Test
    fun myTest() {
        // Start the app
        composeTestRule.setContent {
            MyAppTheme {
                MainScreen(uiState = fakeUiState, /*...*/)
            }
        }

        composeTestRule.onNodeWithText("Continue").performClick()

        composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()
    }
}

其他資源

  • 在 Android 上測試應用程式:主要的 Android 測試到達網頁可讓您進一步瞭解測試的基礎知識和技巧。
  • 測試基礎知識進一步瞭解測試 Android 應用程式的核心概念。
  • 本機測試您可以在自己的工作站本機上執行部分測試。
  • 檢測設備測試建議您一併執行檢測設備測試。也就是說,直接在裝置上執行的測試。
  • 持續整合持續整合可讓您將測試整合至部署管道。
  • 測試不同的螢幕大小在許多可供使用者使用的裝置中,建議您測試不同螢幕大小。
  • Espresso:雖然適用於以 View 為基礎的 UI,但 Espresso 知識仍有助於進行 Compose 測試的某些方面。

程式碼研究室

詳情請參閱 Jetpack Compose Testing 程式碼研究室

範例