בדיקת יחידה באמצעות 'בקצרה'

ה-API של בדיקת יחידות Glance מאפשר לכם לבדוק את קוד Glance בלי להגדיל את התצוגות או להשתמש בכלי אוטומציה של ממשק משתמש. לדוגמה, ה-API של בדיקות היחידה מאפשר לכם לאמת תנאים, כמו אם רכיבים נמצאים ברשימה או אם תיבות סומנו, באמצעות התאמות כמו hasContentDescriptionEqualTo או isChecked.

ממשק ה-API הזה קל משקל ודורש פחות הגדרות, כך שאתם יכולים לבצע פיתוח מבוסס-בדיקות בזמן שאתם מפתחים רכיבים נפרדים של הווידג'ט ומארגנים אותם כדי לשפר את השימוש החוזר בקוד.

הגדרה

בדוגמאות הבאות מוצגים יחסי התלות שנדרשים לשימוש בספריית בדיקות היחידה:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

מבנה הבדיקה

כדי לאפשר שימוש חוזר בקוד ובדיקות יחידה, כדאי לארגן את הפונקציות הניתנות להרכבה מחוץ למחלקה GlanceAppWidget. צריך לצמצם ככל האפשר את המורכבות של היחידות שנבדקות.

אפשר לטרגט רכיב Composable לבדיקה באמצעות provideComposable ולהריץ בדיקות יחידה על צומת Glance אחד או יותר באמצעות onNode או onAllNodes בהתאמה.

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

הגדרת ההקשר והגודל של הבדיקה

אם הפונקציה הניתנת להרכבה קוראת הקשר באמצעות השיטה LocalContext.current(), צריך להגדיר הקשר באמצעות setContext(). אם לא, השלב הזה הוא אופציונלי.

אתם יכולים להשתמש בכל מסגרת לבדיקת יחידות ב-Android שמבוססת על JVM, כמו Roboletric, כדי לספק את ההקשר.

אם הפונקציה הניתנת להרכבה ניגשת אל LocalSize, צריך להגדיר את הגודל המיועד לבדיקה לפני שמספקים פונקציה ניתנת להרכבה בבדיקה. גודל ברירת המחדל הוא ‎349.dp x 455.dp, ששווה לווידג'ט בגודל 5x4 שמוצג במכשיר Pixel 4 במצב אנכי.

  • אם הווידג'ט של האפליקציה משתמש ב-sizeMode == Single, אפשר להגדיר את זה ל-minWidth ול-minHeight בקובץ info.xml של הווידג'ט.
  • אם הווידג'ט של האפליקציה משתמש ב-sizeMode == Exact, אפשר לזהות את הגדלים לבדיקה באופן דומה לשיטה שבה קובעים את הגודל של הווידג'ט, ולזהות את הגדלים לרוחב ולאורך שבהם הווידג'ט עשוי להופיע ולבדוק אותם.
  • אם הווידג'ט של האפליקציה משתמש ב-sizeMode == Responsive, אפשר להגדיר את הגודל לאחד מהגדלים שמופיעים ברשימה שמספקים כשמציינים את sizeMode.

משך הזמן הקצוב לתפוגה של בדיקה הוא שנייה אחת כברירת מחדל, אבל אפשר להעביר משך זמן מותאם אישית כארגומנט לשיטה runGlanceAppWidgetUnitTest אם התשתית של הבדיקה מחייבת משך זמן קצוב שונה.

מידע נוסף ודוגמאות קוד זמינים במאמרי העזרה בנושא runGlanceAppWidgetUnitTest.