اختبار الوحدات من خلال ميزة "نظرة سريعة"

تتيح لك واجهة برمجة التطبيقات لاختبار الوحدات في Glance اختبار تعليمات Glance البرمجية بدون تضخيم طرق العرض أو الحاجة إلى أداة UI Automator. على سبيل المثال، تتيح لك واجهة برمجة التطبيقات لاختبار الوحدات التحقّق من الحالات، مثل ما إذا كانت العناصر في قائمة أو ما إذا تم وضع علامة في المربّعات، وذلك باستخدام أدوات المطابقة مثل hasContentDescriptionEqualTo أو isChecked.

تتميّز واجهة برمجة التطبيقات هذه بأنّها بسيطة ولا تتطلّب الكثير من الإعدادات، ما يتيح لك إجراء عملية تطوير تستند إلى الاختبار أثناء تطوير أجزاء فردية من التطبيق المصغّر وتنظيمها لتحسين إعادة استخدام التعليمات البرمجية.

الإعداد

يتم عرض الاعتماديات المطلوبة لاستخدام مكتبة اختبارات الوحدات في الأمثلة التالية:

// 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 لتفعيل إعادة استخدام التعليمات البرمجية واختبار الوحدات. قلِّل من تعقيد الوحدات التي يتم اختبارها قدر الإمكان.

يمكنك استهداف دالة مركّبة للاختبار باستخدام 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 × 455 وحدة بكسل مستقلة الكثافة، وهو ما يعادل تطبيقًا مصغرًا حجمه 5×4 معروضًا على جهاز Pixel 4 في الوضع العمودي.

  • إذا كان AppWidget يستخدم sizeMode == Single، يمكنك ضبط ذلك على minWidth وminHeight في ملف info.xml الخاص بالتطبيق المصغر.
  • إذا كان AppWidget يستخدم sizeMode == Exact، يمكنك تحديد الأحجام التي تريد اختبارها بطريقة مشابهة لتحديد حجم التطبيق المصغّر وتحديد أحجام الوضع الأفقي والعمودي التي قد يظهر عليها التطبيق المصغّر واختبارها.
  • إذا كان AppWidget يستخدم sizeMode == Responsive، يمكنك ضبط ذلك على أحد الأحجام من القائمة التي تقدّمها عند تحديد sizeMode.

المدة التلقائية لانتهاء مهلة الاختبار هي ثانية واحدة، ولكن يمكنك تمرير مدة مخصّصة كوسيطة إلى إجراء runGlanceAppWidgetUnitTest إذا كانت البنية الأساسية للاختبار تفرض مهلة مختلفة.

لمزيد من المعلومات ونماذج التعليمات البرمجية، راجِع المستندات المرجعية الخاصة بـ runGlanceAppWidgetUnitTest.