Glance を使用した単体テスト

Glance 単体テスト API を使用すると、ビューを拡張したり UI Automator を必要としたりすることなく、Glance コードをテストできます。たとえば、単体テスト 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 を使用してテスト対象のコンポーザブルを指定し、onNode または onAllNodes を使用して、1 つまたは複数の 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() を使用してコンテキストを設定する必要があります。それ以外の場合は、この手順は省略可能です。

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

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

テストのタイムアウトのデフォルトの期間は 1 秒ですが、テスト インフラストラクチャで別のタイムアウトが適用される場合は、カスタム期間を runGlanceAppWidgetUnitTest メソッドの引数として渡すことができます。

詳細とコードサンプルについては、リファレンス ドキュメントをご覧ください。runGlanceAppWidgetUnitTest