āĻāĻĒāύāĻžāϰ āϰāĻāύāĻž āĻā§āĻĄā§āϰ āĻāĻāϰāĻŖ āϏāĻ āĻŋāĻ āĻāĻŋāύāĻž āϤāĻž āϝāĻžāĻāĻžāĻ āĻāϰāϤ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ 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()
}
}
āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϏāĻŽā§āĻĒāĻĻ
- āĻ ā§āϝāĻžāύā§āĻĄā§āϰāϝāĻŧā§āĻĄā§ āĻ ā§āϝāĻžāĻĒ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ : āĻĒā§āϰāϧāĻžāύ āĻ ā§āϝāĻžāύā§āĻĄā§āϰāϝāĻŧā§āĻĄ āĻā§āϏā§āĻāĻŋāĻ āϞā§āϝāĻžāύā§āĻĄāĻŋāĻ āĻĒā§āώā§āĻ āĻžāĻāĻŋ āĻĒāϰā§āĻā§āώāĻžāϰ āĻŽā§āϞāĻŋāĻ āĻŦāĻŋāώāϝāĻŧ āĻāĻŦāĻ āĻā§āĻļāϞāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āĻŦāĻŋāϏā§āϤā§āϤ āĻĻā§āĻļā§āϝ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
- āĻĒāϰā§āĻā§āώāĻžāϰ āĻŽā§āϞāĻŋāĻ āĻŦāĻŋāώāϝāĻŧāĻā§āϞāĻŋ : āĻāĻāĻāĻŋ Android āĻ ā§āϝāĻžāĻĒ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻĒāĻŋāĻāύ⧠āĻŽā§āϞ āϧāĻžāϰāĻŖāĻžāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύā§āύāĨ¤
- āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻĒāϰā§āĻā§āώāĻž : āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āύāĻŋāĻāϏā§āĻŦ āĻāϝāĻŧāĻžāϰā§āĻāϏā§āĻā§āĻļāύ⧠āϏā§āĻĨāĻžāύā§āϝāĻŧāĻāĻžāĻŦā§ āĻāĻŋāĻā§ āĻĒāϰā§āĻā§āώāĻž āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
- āĻāύā§āϏāĻā§āϰā§āĻŽā§āύā§āĻā§āĻĄ āĻĒāϰā§āĻā§āώāĻž : āϝāύā§āϤā§āϰāϝā§āĻā§āϤ āĻĒāϰā§āĻā§āώāĻž āĻāĻžāϞāĻžāύā§āĻ āĻāĻžāϞ⧠āĻ āĻā§āϝāĻžāϏāĨ¤ āĻ āϰā§āĻĨāĻžā§, āϝ⧠āĻĒāϰā§āĻā§āώāĻžāĻā§āϞāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻŋāĻāĻžāĻāϏ⧠āĻāϞā§āĨ¤
- āĻā§āϰāĻŽāĻžāĻāϤ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ : āĻā§āϰāĻŽāĻžāĻāϤ āĻāύā§āĻāĻŋāĻā§āϰā§āĻļāύ āĻāĻĒāύāĻžāĻā§ āĻāĻĒāύāĻžāϰ āĻĒāϰā§āĻā§āώāĻžāĻā§āϞāĻŋāĻā§ āĻāĻĒāύāĻžāϰ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ⧠āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤
- āĻŦāĻŋāĻāĻŋāύā§āύ āϏā§āĻā§āϰā§āύā§āϰ āĻŽāĻžāĻĒ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ : āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻāύā§āϝ āĻāĻĒāϞāĻŦā§āϧ āĻāĻŋāĻā§ āĻ āύā§āĻ āĻĄāĻŋāĻāĻžāĻāϏā§āϰ āϏāĻžāĻĨā§, āĻāĻĒāύāĻžāϰ āĻŦāĻŋāĻāĻŋāύā§āύ āϏā§āĻā§āϰā§āύ āĻŽāĻžāĻĒā§āϰ āĻāύā§āϝ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤
- āĻāϏāĻĒā§āϰā§āϏ⧠: āĻāĻŋāĻ-āĻāĻŋāϤā§āϤāĻŋāĻ UI-āĻāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝā§, Espresso āĻā§āĻāĻžāύ āĻāĻāύāĻ āϰāĻāύāĻž āĻĒāϰā§āĻā§āώāĻžāϰ āĻāĻŋāĻā§ āĻĻāĻŋāĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āϏāĻšāĻžāϝāĻŧāĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻā§āĻĄāϞā§āϝāĻžāĻŦ
āĻāϰāĻ āĻāĻžāύāϤā§, āĻā§āĻāĻĒā§āϝāĻžāĻ āĻāĻŽā§āĻĒā§āĻ āĻā§āϏā§āĻāĻŋāĻ āĻā§āĻĄāϞā§āϝāĻžāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĻā§āĻā§āύāĨ¤
āύāĻŽā§āύāĻž
āĻāĻĒāύāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϏā§āϤāĻžāĻŦāĻŋāϤ
- āĻĻā§āϰāώā§āĻāĻŦā§āϝ: āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦāύā§āϧ āĻĨāĻžāĻāϞ⧠āϞāĻŋāĻā§āĻ āĻā§āĻā§āϏāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāϝāĻŧ
- āϰāĻāύāĻžāϝāĻŧ āĻļāĻŦā§āĻĻāĻžāϰā§āĻĨāĻŦāĻŋāĻĻā§āϝāĻž
- āĻāĻŽā§āĻĒā§āĻā§ āĻāĻāύā§āĻĄā§ āĻāύāϏā§āĻ
- āĻ āύā§āϝāĻžāύā§āϝ āĻŦāĻŋāĻŦā§āĻāύāĻž