android-testing について
android-testingは、Androidアプリのテストを扱う開発者向けガイダンススキルです。ユニット、インテグレーション、Compose UIのスクリーンショットテストに加え、HiltやRoborazziの設定例を紹介します。
主な機能
- 01ユニット・統合・UIテストを解説
- 02Hiltによる依存性注入テストを例示
- 03Roborazziのスクリーンショットテストを設定
- 04Gradleのテスト・画像コマンドを提示
活用シーン
- 01Androidアプリ各層のテスト戦略を計画
- 02Compose画面のスクリーンショット回帰テストを追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ new-silvermoon/ awesome-android-agent-skills --skill android-testingインストール後、Claude Code で/android-testingを入力して読み込まれたか確認します。
詳細
Android のテスト戦略
このスキルでは、「Now in Android」に着想を得た、最新の Android アプリケーションをテストするための専門的なガイダンスを提供します。ユニットテスト、Hilt 統合テスト、スクリーンショットテストを取り上げます。
テストピラミッド
- ユニットテスト:高速で、ロジック(ViewModel、Repository)を分離します。
- 統合テスト:相互作用(Room DAO、Retrofit と MockWebServer の比較)をテストします。
- UI/スクリーンショットテスト:UI の正しさを確認します(Compose)。
依存関係(libs.versions.toml)
適切なテスト用依存関係が設定されていることを確認してください。
[libraries]
junit4 = { module = "junit:junit", version = "4.13.2" }
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version = "1.1.5" }
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version = "3.5.1" }
compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-junit4" }
hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" }
roborazzi = { group = "io.github.takahirom.roborazzi", name = "roborazzi", version.ref = "roborazzi" }
Roborazzi によるスクリーンショットテスト
スクリーンショットテストでは、UI の見た目が退行していないことを確認できます。NiA では、エミュレーターが不要で JVM 上で高速に実行できるため、Roborazzi を使用しています。
セットアップ
libs.versions.tomlにプラグインを追加します。[plugins] roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }- モジュールの
build.gradle.ktsで適用します。plugins { alias(libs.plugins.roborazzi) }
スクリーンショットテストの作成
@RunWith(AndroidJUnit4::class)
@GraphicsMode(GraphicsMode.Mode.NATIVE)
@Config(sdk = [33], qualifiers = RobolectricDeviceQualifiers.Pixel5)
class MyScreenScreenshotTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
@Test
fun captureMyScreen() {
composeTestRule.setContent {
MyTheme {
MyScreen()
}
}
composeTestRule.onRoot()
.captureRoboImage()
}
}
Hilt テスト
テストで依存関係を注入するには、HiltAndroidRule を使用します。
@HiltAndroidTest
class MyDaoTest {
@get:Rule
var hiltRule = HiltAndroidRule(this)
@Inject
lateinit var database: MyDatabase
private lateinit var dao: MyDao
@Before
fun init() {
hiltRule.inject()
dao = database.myDao()
}
// ... tests
}
テストの実行
- ユニット:
./gradlew test - スクリーンショット:
./gradlew recordRoborazziDebug(記録)/./gradlew verifyRoborazziDebug(検証)
コメント
Markdown 対応