Android Testing

new-silvermoon/awesome-android-agent-skills/.github/skills/testing_and_automation/android-testing

作者 new-silvermoon82900eacc8dbe13de93c6310af27b9df4b2bd2f6無授權條款收錄於 2026年10月9日更新於 2026年10月9日

Comprehensive testing strategy involving Unit, Integration, Hilt, and Screenshot tests.

AI 產生的概覽

現代 Android 應用程式測試指南,涵蓋單元測試、Hilt 整合測試與 Roborazzi 螢幕擷取測試。

功能
說明 Android 測試金字塔,包含單元測試、整合測試與 UI/螢幕擷取測試,並列出 libs.versions.toml 中對應的測試相依性。它示範如何設定以 JVM 為基礎的 Roborazzi 螢幕擷取測試、如何撰寫 Compose 螢幕擷取測試,以及如何用 HiltAndroidRule 注入相依性。此外也提供執行單元測試以及錄製或驗證螢幕擷取畫面的 Gradle 指令。
適用情境
適用於為現代 Android 應用程式規劃或撰寫測試時,尤其是 Compose UI、Room 或 Retrofit 相關層。適合希望以快速 JVM 螢幕擷取測試取代模擬器 UI 測試,或需要在測試中使用 Hilt 相依性注入的團隊。也適合設定測試相依性與 Gradle 測試指令的情境。
執行需求
不附帶指令碼,僅為說明文件。依指南操作需要具備 Gradle、Kotlin、JUnit、Hilt、Roborazzi、Robolectric、Espresso 與 Compose UI 測試相依性的 Android 專案,以及用於 Roborazzi 螢幕擷取測試的本機 JVM。

Android Testing Strategies

This skill provides expert guidance on testing modern Android applications, inspired by "Now in Android". It covers Unit Tests, Hilt Integration Tests, and Screenshot Testing.

Testing Pyramid

  1. Unit Tests: Fast, isolate logic (ViewModels, Repositories).
  2. Integration Tests: Test interactions (Room DAOs, Retrofit vs MockWebServer).
  3. UI/Screenshot Tests: Verify UI correctness (Compose).

Dependencies (libs.versions.toml)

Ensure you have the right testing dependencies.

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" }

Screenshot Testing with Roborazzi

Screenshot tests ensure your UI doesn't regress visually. NiA uses Roborazzi because it runs on the JVM (fast) without needing an emulator.

Setup

  1. Add the plugin to libs.versions.toml:
    toml
    [plugins]roborazzi = { id = "io.github.takahirom.roborazzi", version.ref = "roborazzi" }
  2. Apply it in your module's build.gradle.kts:
    kotlin
    plugins {    alias(libs.plugins.roborazzi)}

Writing a Screenshot Test

kotlin
@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 Testing

Use HiltAndroidRule to inject dependencies in tests.

kotlin
@HiltAndroidTestclass 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}

Running Tests

  • Unit: ./gradlew test
  • Screenshots: ./gradlew recordRoborazziDebug (to record) / ./gradlew verifyRoborazziDebug (to verify)

來源與署名

來源:new-silvermoon/awesome-android-agent-skills位於.github/skills/testing_and_automation/android-testing提交82900ea

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架