mcpField
A
android-testing

android-testing

github.com/new-silvermoonテスト・品質992844 回インストール13 週間前に更新
リポジトリ

android-testing について

android-testingは、Androidアプリのテストを扱う開発者向けガイダンススキルです。ユニット、インテグレーション、Compose UIのスクリーンショットテストに加え、HiltやRoborazziの設定例を紹介します。

主な機能

  1. 01ユニット・統合・UIテストを解説
  2. 02Hiltによる依存性注入テストを例示
  3. 03Roborazziのスクリーンショットテストを設定
  4. 04Gradleのテスト・画像コマンドを提示

活用シーン

  1. 01Androidアプリ各層のテスト戦略を計画
  2. 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 統合テスト、スクリーンショットテストを取り上げます。

テストピラミッド

  1. ユニットテスト:高速で、ロジック(ViewModel、Repository)を分離します。
  2. 統合テスト:相互作用(Room DAO、Retrofit と MockWebServer の比較)をテストします。
  3. 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 を使用しています。

セットアップ
  1. libs.versions.toml にプラグインを追加します。
    [plugins]
    roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
    
  2. モジュールの 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(検証)

コメント