Glance 単体テスト API を使用すると、ビューを拡張したり UI Automator を必要としたりすることなく、Glance
コードをテストできます。たとえば、単体テスト 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
を使用して、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 で、これは Pixel 4 デバイスで縦向きに表示される 5x4 ウィジェットに相当します。
- AppWidget で
sizeMode == Singleを使用する場合は、ウィジェットのinfo.xmlファイルでminWidthとminHeightに設定できます。 - AppWidget で
sizeMode == Exactを使用する場合は、ウィジェットのサイズを決定する方法と同様に、テストするサイズを 特定し、 ウィジェットが表示される可能性のある横向きと縦向きのサイズを特定してテスト できます。 - AppWidget で
sizeMode == Responsiveを使用する場合は、 指定したリストのいずれかのサイズに設定できますsizeMode。
テストのタイムアウトのデフォルトの期間は 1 秒ですが、テスト インフラストラクチャで別のタイムアウトが適用されている場合は、カスタム期間を引数として runGlanceAppWidgetUnitTest メソッドに渡すことができます。
詳細とコードサンプルについては、
runGlanceAppWidgetUnitTestリファレンス ドキュメントをご覧ください。