āφāĻĒāύāĻžāϰ āϰāϚāύāĻž āϞ⧇āφāωāϟ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ

āφāĻĒāύāĻžāϰ āϰāϚāύāĻž āϕ⧋āĻĄā§‡āϰ āφāϚāϰāĻŖ āϏāĻ āĻŋāĻ• āĻ•āĻŋāύāĻž āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ UI āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞāĻŋ āϧāϰāϤ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϗ⧁āĻŖāĻŽāĻžāύ āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ⧎

āϰāϚāύāĻž āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāϤ⧇, āϤāĻžāĻĻ⧇āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāϤ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ API āĻāϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇āĨ¤ āĻāĻĒāĻŋāφāχ-āĻ āϟāĻžāχāĻŽ āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āĻļāύ⧇āϰ āĻŽāϤ⧋ āωāĻ¨ā§āύāϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāĻ“ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āφāϚāϰāĻŖ āϝāĻžāϚāĻžāχ āĻ•āϰ⧇ āĻāĻŽāύ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻĒāϰ⧀āĻ•ā§āώāĻž āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻāχ APIāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤

āĻ­āĻŋāω

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϰāϚāύāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻ­āĻŋāω āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āύ āϤāĻŦ⧇ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻŦāĻŋāĻ­āĻžāϗ⧇ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ…ā§āϝāĻžāĻĒāϗ⧁āϞāĻŋ āĻĻ⧇āϖ⧁āύāĨ¤

āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇, āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āϜāĻžāϝāĻŧāĻ—āĻž āĻšāϞ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ UI āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻžāĨ¤ āĻāϟāĻŋ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇ āϝ⧇ āφāĻĒāύāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ­āĻŋāω āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻš āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āϚāĻžāϞāĻžāύ⧋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϗ⧁āϞāĻŋāϕ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻŽā§‚āϞ āϧāĻžāϰāĻŖāĻž

āφāĻĒāύāĻžāϰ āϰāϚāύāĻž āϕ⧋āĻĄ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŋāϛ⧁ āĻŽā§‚āϞ āϧāĻžāϰāĻŖāĻž āϰāϝāĻŧ⧇āϛ⧇:

  • āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŦāĻŋāĻĻā§āϝāĻž : āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŦāĻŋāĻĻā§āϝāĻž āφāĻĒāύāĻžāϰ UI āϕ⧇ āĻ…āĻ°ā§āĻĨ āĻĻ⧇āϝāĻŧ, āĻĒāϰ⧀āĻ•ā§āώāĻžāϗ⧁āϞāĻŋāϕ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤
  • āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āĻāĻĒāĻŋāφāχ : āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āĻāĻĒāĻŋāφāχ āφāĻĒāύāĻžāϕ⧇ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇, āϤāĻžāĻĻ⧇āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤
  • āϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāχāĻœā§‡āĻļāύ : āϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāχāĻœā§‡āĻļāύ āϝāĻžāϚāĻžāχ āĻ•āϰ⧇ āϝ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻžāϗ⧁āϞāĻŋ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻŦāĻž āĻĻāĻžāĻŦā§€ āĻ•āϰāĻžāϰ āφāϗ⧇ UI āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧇āĨ¤
  • āχāĻ¨ā§āϟāĻžāϰāĻ…āĻĒāĻžāϰ⧇āĻŦāĻŋāϞāĻŋāϟāĻŋ : āχāĻ¨ā§āϟāĻžāϰāĻ…āĻĒāĻžāϰ⧇āĻŦāĻŋāϞāĻŋāϟāĻŋ āĻāĻ•āχ āĻ…ā§āϝāĻžāĻĒ⧇ āĻ•āĻŽā§āĻĒā§‹āϜ āĻāĻŦāĻ‚ āĻ­āĻŋāω-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āωāĻ­āϝāĻŧ āωāĻĒāĻžāĻĻāĻžāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻžāϕ⧇ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇āĨ¤

āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āϚāĻŋāϟāĻļāĻŋāϟ

āĻ•āĻŽā§āĻĒā§‹āĻœā§‡ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āϝ⧇ āϏāĻŽāĻ¸ā§āϤ āĻŽā§‚āϞ āĻŦāĻŋāώāϝāĻŧāϗ⧁āϞāĻŋ āĻļāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āϤāĻžāϰ āĻāĻ•āϟāĻŋ āĻ“āĻ­āĻžāϰāĻ­āĻŋāωāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āϚāĻŋāϟāĻļāĻŋāϟāϟāĻŋ āĻĻ⧇āϖ⧁āύāĨ¤

āϏ⧇āϟāφāĻĒ

āĻ•āĻŽā§āĻĒā§‹āϜ āϕ⧋āĻĄ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āϏ⧇āϟ āφāĻĒ āĻ•āϰ⧁āύāĨ¤

āĻĒā§āϰāĻĨāĻŽā§‡, āφāĻĒāύāĻžāϰ UI āĻĒāϰ⧀āĻ•ā§āώāĻž āϧāĻžāϰāĻŖāĻ•āĻžāϰ⧀ āĻŽāĻĄāĻŋāωāϞ⧇āϰ build.gradle āĻĢāĻžāχāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āϝ⧋āĻ— āĻ•āϰ⧁āύ:

// Test rules and transitive dependencies:
androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
// Needed for createComposeRule(), but not for createAndroidComposeRule<YourActivity>():
debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

āĻāχ āĻŽāĻĄāĻŋāωāϞāϟāĻŋāϤ⧇ AndroidComposeTestRule āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ ComposeTestRule āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āύāĻŋāϝāĻŧāĻŽā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāύāĻŋ āϰāϚāύāĻž āϏāĻžāĻŽāĻ—ā§āϰ⧀ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻŦāĻž āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āφāĻĒāύāĻŋ āĻĢā§āϝāĻžāĻ•ā§āϟāϰāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāϝāĻŧāĻŽ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āĻšāϝāĻŧ createComposeRule āĻ…āĻĨāĻŦāĻž, āφāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ, createAndroidComposeRule āĨ¤ āϰāϚāύāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ UI āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāχāϰāĻ•āĻŽ āĻĻ⧇āĻ–āĻžāϝāĻŧ:

// file: app/src/androidTest/java/com/package/MyComposeTest.kt

class MyComposeTest {

    @get:Rule val composeTestRule = createComposeRule()
    // use createAndroidComposeRule<YourActivity>() if you need access to
    // an activity

    @Test
    fun myTest() {
        // Start the app
        composeTestRule.setContent {
            MyAppTheme {
                MainScreen(uiState = fakeUiState, /*...*/)
            }
        }

        composeTestRule.onNodeWithText("Continue").performClick()

        composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()
    }
}

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϏāĻŽā§āĻĒāĻĻ

āϕ⧋āĻĄāĻ˛ā§āϝāĻžāĻŦ

āφāϰāĻ“ āϜāĻžāύāϤ⧇, āĻœā§‡āϟāĻĒā§āϝāĻžāĻ• āĻ•āĻŽā§āĻĒā§‹āϜ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āϕ⧋āĻĄāĻ˛ā§āϝāĻžāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĻ⧇āϖ⧁āύāĨ¤

āύāĻŽā§āύāĻž

{% āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨ⧇ %} {% endverbatim %} {% āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨ⧇ %} {% endverbatim %}