🧪
【Android】Glance 単体テスト
安定版 glance*-testing がリリース🎉
1.0.0 まではglance-experimental-toolsという別リポジトリで試験的に提供されていましたが、ついに安定版として androidx (Jetpack) に仲間入りしました!
テストの実装
基本的な方法は公式ドキュメントで説明されている通りです。
ただし単体テストとして実装するため、Context
など Android SDK 固有の依存を Robolectric で適切にモックする必要があります。
セットアップ
${module}/build.gradle.kts
android {
+ testOptions {
+ unitTests {
+ isIncludeAndroidResources = true
+ }
+ }
}
dependencies {
+ testImplementation("junit:junit:4.13.2")
+ testImplementation("androidx.test.ext:junit:1.2.1")
+ testImplementation("org.robolectric:robolectric:4.13")
+ testImplementation("androidx.glance:glance-appwidget-testing:1.1.0")
}
テスト
Jetpack Compose のテストと同様に書けます!
${module}/src/test/**/WidgetTest.kt
@RunWith(AndroidJUnit4::class)
@Config(sdk = [34])
class CounterWidgetTest {
@Test
fun CounterScreen_idle() = runGlanceAppWidgetUnitTest {
// 1. 描画サイズの指定
setAppWidgetSize(DpSize(100.dp, 100.dp))
// (必要なら)Contextの用意
val context: Context = ApplicationProvider.getApplicationContext()
// 2. Glance の指定
provideComposable {
CompositionLocalProvider(
LocalContext provides context
) {
WidgetTheme {
CounterScreen(
count = 10,
isLoading = false,
onIncrement = { },
onDecrement = { },
)
}
}
}
// 3. 検査の実行
onNode(hasText("10")).assertExists()
onNode(hasTestTag("counter_loading")).assertDoesNotExist()
}
}
テスト対象のウィジェットの詳細な実装はGitHubを参照してください
GitHubで編集を提案
Discussion