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