Glance 単体テスト API を使用すると、ビューをインフレートせずに Glance のコードをテストできます
UI Automator も不要ですたとえば、単体テスト 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(Google Pixel 4 の 5x4 ウィジェットに相当)
縦表示にします
- AppWidget で
sizeMode == Single
を使用する場合は、 ウィジェットのinfo.xml
ファイルのminWidth
とminHeight
。 - AppWidget で
sizeMode == Exact
を使用する場合は、 ウィジェットのサイズを決める方法と同様の方法でテストを行い、 ウィジェットが表示される可能性がある横向きと縦向きのサイズを特定して、 できます。 - AppWidget で
sizeMode == Responsive
を使用する場合は、次のいずれかに設定できます。sizeMode
を指定するときに指定したリストのサイズ。
デフォルトのテスト タイムアウト時間は 1 秒ですが、カスタムのタイムアウトを
テストを実行する場合は、runGlanceAppWidgetUnitTest
メソッドの引数として duration
異なるタイムアウトが適用されます。
詳細とコードサンプルについては、
runGlanceAppWidgetUnitTest
。