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

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

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

הגדרה

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

// 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, כמו Robolectric, כדי לספק את ההקשר.

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

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

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

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