تست واحد با Glance

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" },
            )
        }
    }
}

تنظیم زمینه و اندازه برای آزمون

اگر تابع composable شما با استفاده از متد LocalContext.current() ‎، context را می‌خواند، باید با استفاده از setContext() ‎، context را تنظیم کنید. در غیر این صورت، این مرحله اختیاری است.

شما می‌توانید از هر چارچوب تست واحد اندروید مبتنی بر JVM، مانند Roboletric، برای فراهم کردن زمینه استفاده کنید.

اگر تابع composable شما به LocalSize دسترسی دارد، قبل از ارائه composable در تست، اندازه مورد نظر را برای تست تنظیم کنید. اندازه پیش‌فرض 349.dp x 455.dp است که معادل یک ویجت 5x4 است که در دستگاه Pixel 4 در حالت عمودی نشان داده می‌شود.

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

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

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