互通性

Compose 整合了常見的測試架構。

與 Espresso 的互通性

在混合型應用程式中,您可以在檢視區塊階層中找到 Compose 元件, Compose 可組合項中的 View (透過 AndroidView 可組合項)。

這兩種類型不需要任何特殊步驟。您將觀看次數和觀看次數 Espresso 的 onView,以及使用 ComposeTestRule 的 Compose 元素。

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

與 UiAutomator 的互通性

根據預設,可組合函式只能透過 UiAutomator 存取 便利的描述方式 (顯示文字、內容說明等)。如果您希望 如要存取使用 Modifier.testTag 的任何可組合項,您必須啟用 特定可組合函式的語意屬性 testTagsAsResourceId 子樹狀結構。如果可組合項沒有任何內容,就很適合啟用這項行為 其他專屬帳號代碼,例如可捲動的可組合函式 (例如 LazyColumn)。

在可組合函式階層中,僅啟用語意屬性一次,以便 確保所有含有 Modifier.testTag 的巢狀可組合項都可以從 UiAutomator。

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

任何具有 Modifier.testTag(tag) 的可組合項都能使用 中的By.res(resourceName)使用與 resourceName 相同的 tag

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

其他資源

  • 在 Android 上測試應用程式:主要 Android 測試 到達網頁會針對測試的基礎知識和技巧提供廣泛的資訊。
  • 測試基本知識瞭解詳情 介紹測試 Android 應用程式的核心概念。
  • 本機測試您可以執行部分測試 或您自己的工作站
  • 檢測設備測試情況良好 執行檢測設備測試也就是說,這些測試會直接執行 應用程式。
  • 持續整合 持續整合可讓您將測試整合至部署作業 這種模型通常已開放原始碼 可以透過自訂筆記本或管線微調
  • 測試不同的螢幕大小 由於使用者可能會使用許多裝置,所以您應該針對不同的螢幕進行測試 大小。
  • Espresso:適用於以檢視畫面為基礎的 UI、Espresso 知識仍對 Compose 的某些層面有所幫助 進行測試。