使用 Glance 進行單元測試

Glance 單元測試 API 可讓您測試 Glance 程式碼,而無須加載檢視畫面或需要 UI 自動化器。舉例來說,單元測試 API 可讓您使用 hasContentDescriptionEqualToisChecked 等比對器,驗證條件 (例如元素是否位於清單中,或方塊是否已勾選)。

這個 API 輕巧,設定需求較少,因此您可以在開發小工具的個別部分時,執行以測試為導向的開發作業,並將這些部分整理好,以便改善程式碼重複使用。

設定

以下範例顯示使用單元測試程式庫所需的依附元件:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.0'
testImplementation 'androidx.glance:glance-AppWidget-testing:1.1.0'
testImplementation 'org.robolectric:robolectric:4.11.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

測試結構

將可組合函式整理在 GlanceAppWidget 類別之外,以便進行程式碼重複使用和單元測試。盡可能降低測試單元的複雜度。

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasAuthorAsSubtitle() = runGlanceAppWidgetUnitTest {
        // Prepare inputs and state
        setAppWidgetSize(100.dp, 100.dp)

        // Set the composable under test
        provideComposable {
            MyNewsItemComposable(TEST_NEWS_ITEM)
        }

        // Perform assertions
        onNode(hasTestTag("subTitle"))
            .assertHasText(TEST_NEWS_ITEM.authorName)
    }
}

設定測試的內容和大小

如果可組合函式使用 LocalContext.current() 方法讀取內容,則必須使用 LocalContext.current() 方法設定內容。否則,這個步驟為選用步驟。

您可以使用任何以 JVM 為基礎的 Android 單元測試架構 (例如 Roboletric) 來提供內容。

如果可組合函式存取 LocalSize,請先為測試設定預期大小,再提供可組合函式。預設大小為 349.dp x 455.dp,相當於在 Pixel 4 裝置上以直向模式顯示的 5 x 4 小工具。

  • 如果 AppWidget 使用 sizeMode == Single,您可以在小工具的 info.xml 檔案中將其設為 minWidthminHeight
  • 如果 AppWidget 使用 sizeMode == Exact,您可以按照決定小工具的大小,找出要測試的大小,並找出小工具可能顯示的橫向和直向大小,然後進行測試。
  • 如果 AppWidget 使用 sizeMode == Responsive,您可以將其設為指定 sizeMode 時提供的清單中所列的其中一個大小。

測試逾時的預設時間長度為 1 秒,但如果測試基礎架構強制執行不同的逾時設定,您可以將自訂時間長度做為引數傳遞至 runGlanceAppWidgetUnitTest 方法。

如需詳細資訊和程式碼範例,請參閱 runGlanceAppWidgetUnitTest 的參考說明文件。