اختبر شظايا تطبيقك

الإعلانات

اختبر شظايا تطبيقك

 

اختبر شظايا تطبيقك

تعمل الشظايا كحاويات، قابلة لإعادة الإستخدام بداخل تطبيقك، مما يتيح لك تقديم مخطط واجهة المستخدم نفسه..

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

– يجب أن يكون مظهر الشظية الخاصة بك، متناسقاً عبر تكوينات المخطط المختلفة، بما في ذلك تلك التكوينات التي تدعم أحجام الشاشة الأكبر، أو الإتجاه الأفقي للجهاز.

– لا تقم بإنشاء شظية، ذات تسلسل هرمي لطريقة العرض، ما لم تكن الشظية مرئية للمستخدم.

يصف هذا المستند، كيفية تضمين واجهات برمجة التطبيقات، التي يوفرها إطار العمل في الإختبارات التي تقيم سلوك كل شظيه.

 

 

 

تحريك حالة الشظيه

للمساعدة في إعداد شروط إجراء هذه الإختبارات، توفر مكتبة AndroidX، “سيناريو الشظيه” FragmentScenario، لإنشاء شظايا وتغيير حالتها.

ملاحظة: لتشغيل الإختبارات التي تحتوي على كائنات “سيناريو الشظيه” FragmentScenario بنجاح، قم بتشغيل كلٍ من دوال API في تسلسل الأجهزة الخاص بالإختبار.

لمعرفة المزيد حول التسلسلات المختلفة المستخدمة في إختبارات الأندرويد، راجع فهم التسلسلات في الإختبارات.

 

 

 

 

تكوين موقع أداة الإختبار

لإستخدام FragmentScenario على النحو المطلوب، حدد أداة إختبار الشظية في ملف APK التطبيق للإختبار، كما هو موضح في مقتطف الكود التالي:

app/build.gradle

 

dependencies {
    def fragment_version = "1.0.0"
    // ...
    debugImplementation 'androidx.fragment:fragment-testing:$fragment_version'
}

لعرض الإصدارات الحالية لهذه المكتبة، راجع المعلومات المتعلقة بالشظايا في صفحة الإصدارات.

 

 

إنشاء شظية

يتضمن FragmentScenario دوال لبدء الأنواع التالية من الشظايا:

تدعم الدوال أيضاً الأنواع التالية من الشظايا:

– شظايا رسومية، تحتوي على واجهة مستخدم. لبدء تشغيل هذا النوع من الشظايا، قم بإستدعاء ()launchFragmentInContainer .

تقوم FragmentScenario بإرفاق الشظية، على وحدة تحكم العرض الأساسي، الخاص بالنشاط. هذا يحتوي على نشاط فارغ من ناحية أخرى.

 

– شظايا غير رسومية (يشار إليها أحياناً بالشظايا مقطوعة الرأس)، والتي تقوم بتخزين أو تنفيذ معالجة قصيرة الأجل..

للمعلومات المتضمنة في العديد من الأنشطة. لبدء تشغيل هذا النوع من الشظايا، قم بإستدعاء ()launchFragment.

يقوم FragmentScenario بإرفاق هذا النوع من الشظايا، بنشاط فارغ تماماً، نشاط لا يحتوي على عرض أساسي.

 

بعد تشغيل أحد أنواع الشظايا هذه ، يقوم FragmentScenario بدفع الشظية الموجودة تحت الإختبار، إلى حالة “الإستئناف” RESUMED.

تشير هذه الحالة إلى أن الشظية قيد التشغيل. إذا كنت تختبر شظية رسوميه، فسوف تكون مرئية أيضاً للمستخدمين..

بحيث يمكنك تقييم معلومات، بشأن عناصر واجهة المستخدم الخاصة به، بإستخدام إختبارات واجهة المستخدم Espresso.

 

تعرض مقتطفات الأكواد التالية كيفية تشغيل كل نوع من الشظايا:

مثال على شظية رسوميه

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        // The "fragmentArgs" and "factory" arguments are optional.
        val fragmentArgs = Bundle().apply {
            putInt("selectedListItem", 0)
        }
        val factory = MyFragmentFactory()
        val scenario = launchFragmentInContainer<MyFragment>(
                fragmentArgs, factory)
        onView(withId(R.id.text)).check(matches(withText("Hello World!")))
    }
}

 

مثال على شظية غير رسوميه

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        // The "fragmentArgs" and "factory" arguments are optional.
        val fragmentArgs = Bundle().apply {
            putInt("numElements", 0)
        }
        val factory = MyFragmentFactory()
        val scenario = launchFragment<MyFragment>(fragmentArgs, factory)
    }
}

 

 

 

 

 

اختبر شظايا تطبيقك

 

إعادة إنشاء الشظيه

 

إذا كان الجهاز قليل المصادر، فقد يدمر النظام النشاط الذي يقوم بإحتواء شظيتك، مما يتطلب أن يعيد تطبيقك..

إنشاء الشظيه عندما يعود المستخدم إلى تطبيقك. لمحاكاة هذه الحاله، قم بإستدعاء ()recreate :

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.recreate()
    }
}

 

عندما تقوم فئة FragmentScenario بإعادة إنشاء الشظيه تحت الإختبار، ترجع الشظية إلى حالة دورة الحياة التي كانت عليها قبل إعادة إنشائها.

 

 

 

 

دفع الشظية إلى حالة جديدة

في إختبارات واجهة المستخدم لتطبيقك، عادةً ما يكون كافياً فقط إطلاق وإعادة إنشاء الشظية الموجودة تحت الإختبار.

ومع ذلك، في إختبارات وحدة الحبيبات الدقيقه “finer-grained “، قد تقوم أيضاً بتقييم سلوك الشظية أثناء إنتقالاتها من حالة إلى أخرى دورة الحياة.

لدفع الشظية إلى حالة مختلفة من دورة الحياة، قم بإستدعاء ()moveToState . تدعم هذه الدوال الحالات التالية كمعطيات:

 CREATED، STARTED، RESUMED، DESTROYED. يحاكي هذا الإجراء الحالة التي يتسبب فيها النشاط الذي..

يحتوي على الشظية في تغيير حالته نظراً لإنقطاعه بواسطة تطبيق آخر أو إجراء في النظام.

 

ملاحظة: إذا قمت بنقل الشظية إلى حالة التدمير، فلن تتمكن من نقل الشظية إلى حالة أخرى، ولا يمكنك إرفاق الشظية بنشاط مختلف.

 

يظهر مثال على إستخدام ()moveToState في الكود التالي:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.moveToState(State.CREATED)
    }
}

 

تحذير: إذا حاولت نقل الشظية الموجودة تحت الإختبار إلى حالتها الحالية، فإن FragmentScenario تعامل هذا الطلب على أنه إجراء وليس إستثناء.

على وجه الخصوص، تسمح لك واجهة برمجة التطبيقات بنقل الشظية إلى حالة التدمير عدة مرات متتالية.

 

 

 

 

 

إجراءات التشغيل في الشظية

لتشغيل الإجراءات في الشظية الموجودة تحت الإختبار، إستخدم أدوات التطابق مع عرض Espresso للتفاعل مع العناصر في طريقة عرضك:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        onView(withId(R.id.refresh))
                .perform(click())
    }
}

 

إذا كنت بحاجة إلى إستدعاء دالة على الشظية بذاتها، مثل الرد على إختيار في قائمة الخيارات، يمكنك القيام بذلك بأمان من خلال تنفيذ FragmentAction:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.onFragment(fragment ->
            fragment.onOptionsItemSelected(clickedItem) {
                // Update fragment's state based on selected item.
            }
        }
    }
}

 

ملاحظة: في فئة الإختبار، لا تحتفظ بالمراجع إلى الكائنات التي تمررها إلى ()onFragment. فهذه المراجع تستهلك موارد النظام..

وقد تكون المراجع نفسها قديمة لأن الإطار يمكنه إعادة إنشاء الشظية الذي تم تمريرها إلى دالة الإستدعاء.

 

 

 

 

إختبار إجراءات مربع الحوار

 

تقوم الدالة FragmentScenario أيضاً بدعم إختبار مربعات الحوار. على الرغم من أن مربعات الحوار عبارة عن أجزاء “نسخ” من الشظايا الرسومية. 

تقوم بإستخدام الدالة ()launchFragment لكي يتم تعبئة عناصر مربع الحوار، في مربع الحوار نفسه، بدلاً من النشاط، الذي يقوم بتشغيل مربع الحوار.

مقتطف الكود التالي يختبر عملية مغادرة مربع الحوار:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testDismissDialogFragment() {
        // Assumes that "MyDialogFragment" extends the DialogFragment class.
        with(launchFragment<MyDialogFragment>()) {
            onFragment { fragment ->
                assertThat(fragment.dialog).isNotNull()
                assertThat(fragment.requireDialog().isShowing).isTrue()
                fragment.dismiss()
                fragment.requireFragmentManager().executePendingTransactions()
                assertThat(fragment.dialog).isNull()
            }

            // Assumes that the dialog had a button
            // containing the text "Cancel".
            onView(withText("Cancel")).check(doesNotExist())
        }
    }
}

 

راجع أيضاً:

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد