Glance 單元測試 API 可讓您測試 Glance 程式碼,無須加載檢視畫面或使用 UI Automator。舉例來說,單元測試 API 可讓您使用 hasContentDescriptionEqualTo 或 isChecked 等比對器,驗證元素是否在清單中,或方塊是否已勾選等條件。
這個 API 輕量且設定較少,因此您可以在開發小工具的個別部分時,執行測試導向開發,並整理這些部分,提高程式碼重複使用率。
設定
使用單元測試程式庫所需的依附元件,如以下範例所示:
// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.
測試架構
在 GlanceAppWidget 類別外整理可組合函式,以便重複使用程式碼及進行單元測試。盡可能降低受測單元的複雜度。
您可以使用 provideComposable 指定測試可組合項,並分別使用 onNode 或 onAllNodes 在一或多個資訊一覽節點上執行單元測試。
private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!" class MyGlanceComposableTest { @Test fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest { // Set the composable to test provideComposable { MyNewsItemComposable(FAKE_HEADLINE) } // Perform assertions onNode(hasTestTag("headline")) .assertHasText(FAKE_HEADLINE) } @Composable fun MyNewsItemComposable(headline: String) { Row { Text( text = headline, modifier = GlanceModifier.semantics { testTag = "headline" }, ) } } }
設定測試的背景資訊和大小
如果可組合函式使用 LocalContext.current() 方法讀取內容,則必須使用 setContext() 設定內容。否則,這個步驟為選用。
您可以使用任何以 JVM 為基礎的 Android 單元測試架構 (例如 Robolectric) 提供背景資訊。
如果可組合函式會存取 LocalSize,請先設定測試的預期大小,再於測試中提供可組合函式。預設大小為 349.dp x 455.dp,相當於 Pixel 4 裝置在直向模式下顯示的 5x4 小工具。
- 如果 AppWidget 使用
sizeMode == Single,您可以在小工具的info.xml檔案中,將此屬性設為minWidth和minHeight。 - 如果 AppWidget 使用
sizeMode == Exact,您可以找出要測試的大小,方法與決定小工具大小類似,並找出小工具可能顯示的橫向和直向大小,然後進行測試。 - 如果 AppWidget 使用
sizeMode == Responsive,您可以將其設為指定sizeMode時提供的清單中的其中一個大小。
測試逾時的預設時間長度為 1 秒,但如果測試基礎架構強制執行不同的逾時時間,您可以將自訂時間長度做為引數傳遞至 runGlanceAppWidgetUnitTest 方法。
如需更多資訊和程式碼範例,請參閱 runGlanceAppWidgetUnitTest 的參考文件。