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 从公开仓库中收录这些内容。

举报或申请下架