آزمون واحد با Glance

‫Glance unit test API به شما امکان می‌دهد کد Glance خود را بدون گسترش دادن نماها یا نیاز به UI automator آزمایش کنید. برای مثال، میانای برنامه‌سازی کاربردی آزمایش واحد به شما امکان می‌دهد شرایط را تأیید کنید، مثلاً اینکه آیا عناصر در فهرست هستند یا اینکه آیا چارگوش‌ها علامت زده شده‌اند، بااستفاده از تطبیق‌دهنده‌هایی مثل 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، مانند Robolectric، برای ارائه بافت استفاده کنید.

اگر تابع ترکیب‌پذیر شما به LocalSize دسترسی دارد، اندازه موردنظر را برای آزمایش تنظیم کنید و سپس ترکیب‌پذیر را در آزمایش ارائه دهید. اندازه پیش‌فرض ۳۴۹.dp x ۴۵۵.dp است که معادل ابزارک ۵x۴ نشان‌داده‌شده در دستگاه Pixel 4 در حالت عمودی است.

  • اگر AppWidget شما از sizeMode == Single استفاده می‌کند، می‌توانید این را روی minWidth و minHeight در فایل info.xml ابزاره‌تان تنظیم کنید.
  • اگر AppWidget شما از sizeMode == Exact استفاده می‌کند، می‌توانید اندازه‌هایی را که باید آزمایش شوند به همان روشی که اندازه ابزاره را تعیین می‌کنید شناسایی کنید و اندازه‌های افقی و عمودی را که ممکن است ابزاره شما در آن‌ها ظاهر شود شناسایی کنید و آن‌ها را آزمایش کنید.
  • اگر AppWidget شما از sizeMode == Responsive استفاده می‌کند، می‌توانید آن را روی یکی از اندازه‌های موجود در فهرستی که هنگام مشخص کردن sizeMode ارائه می‌دهید تنظیم کنید.

مدت پیش‌فرض برای اتمام مهلت آزمایش ۱ ثانیه است، اما اگر زیرساخت آزمایشتان اتمام مهلت متفاوتی را اعمال می‌کند، می‌توانید مدت سفارشی را به‌عنوان آرگومان به روش runGlanceAppWidgetUnitTest ارسال کنید.

برای اطلاعات بیشتر و نمونه‌های کد، به اسناد مرجع runGlanceAppWidgetUnitTest مراجعه کنید.