יכולת פעולה הדדית

Compose משתלב עם מסגרות בדיקה נפוצות.

יכולת פעולה הדדית עם Espresso

באפליקציה היברידית, אפשר למצוא רכיבי Compose בתוך היררכיות תצוגה ותצוגות בתוך רכיבי Compose (באמצעות הרכיב AndroidView).

אין צורך לבצע פעולות מיוחדות כדי להתאים לאף אחד מהסוגים האלה. תוכלו להתאים בין תצוגות באמצעות onView של Espresso, וליצור רכיבים באמצעות ComposeTestRule.

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

יכולת פעולה הדדית עם UiAutomator

כברירת מחדל, אפשר לגשת לרכיבים הקומפוזביליים מ-UiAutomator רק באמצעות המאפיינים המתאימים שלהם (טקסט מוצג, תיאור התוכן וכו'). כדי לגשת לכל רכיב מורכב שמשתמש ב-Modifier.testTag, צריך להפעיל את המאפיין הסמנטי testTagsAsResourceId להסתעפות המשנית של הרכיב המורכב הספציפי. כדאי להפעיל את ההתנהגות הזו ברכיבי Composables שאין להם כינוי ייחודי אחר, כמו רכיבי Composables שניתן לגלול בהם (לדוגמה, LazyColumn).

מומלץ להפעיל את המאפיין הסמנטי רק פעם אחת ברמה גבוהה בהיררכיית הרכיבים הניתנים לשילוב, כדי לוודא שאפשר לגשת מ-UiAutomator לכל הרכיבים הניתנים לשילוב בתצוגת עץ עם Modifier.testTag.

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

אפשר לגשת לכל רכיב שאפשר ליצור באמצעות Modifier.testTag(tag) באמצעות By.res(resourceName), באמצעות אותו tag כמו ב-resourceName.

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

מקורות מידע נוספים