Android Testing

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

by new-silvermoon82900eacc8dbe13de93c6310af27b9df4b2bd2f6No licenseListed Oct 9, 2026Updated Oct 9, 2026

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

Instructions onlySoftware Development
AI-generated overview

Guidance for testing modern Android apps with unit, Hilt integration and Roborazzi screenshot tests.

What it does
Explains an Android testing pyramid of unit, integration and UI/screenshot tests and lists the corresponding testing dependencies for libs.versions.toml. It shows how to set up Roborazzi for JVM-based screenshot tests, how to write a Compose screenshot test, and how to inject dependencies with HiltAndroidRule. It also gives Gradle commands for running unit tests and recording or verifying screenshots.
When to use it
Use when planning or writing tests for a modern Android application, especially Compose UI, Room or Retrofit layers. It fits teams that want fast JVM screenshot testing instead of emulator-based UI tests, or that need Hilt dependency injection in tests. It is also useful when setting up testing dependencies and Gradle test commands.
Requirements
No scripts are shipped; it is instructions only. Following the guidance requires an Android project with Gradle, Kotlin, JUnit, Hilt, Roborazzi, Robolectric, Espresso and Compose UI test dependencies, plus a local JVM for Roborazzi screenshot tests.

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)

Source and attribution

Source:new-silvermoon/awesome-android-agent-skillsin.github/skills/testing_and_automation/android-testingat commit82900ea

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal