Glance を使用した単体テスト

Glance 単体テスト API を使用すると、ビューをインフレートせずに Glance のコードをテストできます UI Automator も不要ですたとえば、単体テスト 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() メソッドを使用してコンテキストを設定する必要があります。 それ以外の場合は、この手順は省略可能です。

Roboletric などの JVM ベースの Android 単体テスト フレームワークを使用して、 コンテキストを提供します。

コンポーズ可能な関数が LocalSize にアクセスする場合は、目的のサイズを設定する テストでコンポーザブルを提供する前に、その値を渡しています。デフォルトのサイズは 349.dp x 455.dp(Google Pixel 4 の 5x4 ウィジェットに相当) 縦表示にします

  • AppWidget で sizeMode == Single を使用する場合は、 ウィジェットの info.xml ファイルの minWidthminHeight
  • AppWidget で sizeMode == Exact を使用する場合は、 ウィジェットのサイズを決める方法と同様の方法でテストを行い、 ウィジェットが表示される可能性がある横向きと縦向きのサイズを特定して、 できます。
  • AppWidget で sizeMode == Responsive を使用する場合は、次のいずれかに設定できます。 sizeMode を指定するときに指定したリストのサイズ。

デフォルトのテスト タイムアウト時間は 1 秒ですが、カスタムのタイムアウトを テストを実行する場合は、runGlanceAppWidgetUnitTest メソッドの引数として duration 異なるタイムアウトが適用されます。

詳細とコードサンプルについては、 runGlanceAppWidgetUnitTest