使用 Glance 進行單元測試

您可以使用 Glance 單元測試 API 測試 Glance 程式碼,不必擴充檢視區塊或使用 UI 自動化工具。舉例來說,單元測試 API 可讓您使用 hasContentDescriptionEqualToisChecked 等比對器,驗證元素是否位於清單中,或方塊是否已勾選等條件。

這個 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 指定測試的可組合函式,並分別使用 onNodeonAllNodes,在一個或多個 Glance 節點上執行單元測試。

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 單元測試架構 (例如 Roboletric) 提供內容。

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

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

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

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