اختبار موفّري المحتوى

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

إنشاء اختبارات دمج لموفّري المحتوى

يتيح لك موفرو المحتوى الوصول إلى بيانات المستخدمين الفعلية، لذا من المهم التأكّد من اختبار موفِّر المحتوى في بيئة اختبار معزولة. لا يسمح لك هذا النهج إلا بالعمل مع تبعيات البيانات المحددة بشكل صريح في حالة الاختبار. ويعني ذلك أيضًا أنّ اختباراتك لا تعدِّل بيانات المستخدمين الفعلية. على سبيل المثال، يجب أن تتجنب كتابة اختبار يفشل بسبب وجود بيانات متبقية من اختبار سابق. وبالمثل، يجب أن يتجنب الاختبار إضافة معلومات الاتصال الفعلية أو حذفها في مقدم الخدمة.

لاختبار موفّر المحتوى بمعزل عن الآخر، استخدِم الفئة ProviderTestCase2. تتيح لك هذه الفئة استخدام فئات عناصر Android الوهمية، مثل IsolatedContext وMockContentResolver، للوصول إلى معلومات الملفات وقاعدة البيانات بدون التأثير في بيانات المستخدم الفعلية.

يجب كتابة اختبار التكامل كفئة اختبار JUnit 4. لمعرفة المزيد من المعلومات حول إنشاء صفوف اختبار JUnit 4 واستخدام تأكيدات JUnit 4، راجع إنشاء فئة اختبار الوحدة المحلية.

لإنشاء اختبار دمج لموفّر المحتوى، يجب تنفيذ الخطوات التالية:

  1. إنشاء صف الاختبار كفئة فرعية من ProviderTestCase2.
  2. حدِّد فئة AndroidJUnitRunner التي يوفّرها AndroidX Test باعتبارها برنامج الاختبار التلقائي.
  3. ضبط العنصر Context من الفئة ApplicationProvider انظر المقتطف أدناه للاطّلاع على مثال.

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


@Override
protected void setUp() throws Exception {
  super.setUp();
  setContext(ApplicationProvider.getApplicationContext());
}

آلية عمل ProviderTestCase2

أنت تختبر مقدّم خدمة من فئة فرعية من ProviderTestCase2. تضم هذه الفئة الأساسية AndroidTestCase، وبالتالي توفّر إطار عمل اختبار JUnit، بالإضافة إلى الطرق الخاصة بنظام Android لاختبار أذونات التطبيق. إن الميزة الأكثر أهمية في هذه الفئة هي إعدادها، والتي تنشئ بيئة اختبار معزولة.

الإعداد

وتتم التهيئة في الدالة الإنشائية لـ ProviderTestCase2، والتي تستدعيها الفئات الفرعية في الدالة الإنشائية الخاصة بها. تنشئ دالة إنشاء ProviderTestCase2 عنصر IsolatedContext يسمح بعمليات الملفات وقواعد البيانات ولكنها لا تكتشف التفاعلات الأخرى مع نظام Android. وتحدث عمليات الملفات وقاعدة البيانات نفسها في دليل محلي على الجهاز أو المحاكي وله بادئة خاصة.

بعد ذلك، تنشئ الدالة الإنشائية MockContentResolver لاستخدامها كبرنامج تعيين للاختبار.

وأخيرًا، تنشئ الدالة الإنشائية مثيلاً للمزود تحت الاختبار. وهذا العنصر هو كائن ContentProvider طبيعي، ولكنه يأخذ جميع معلومات البيئة الخاصة به من IsolatedContext، لذلك يقتصر على العمل في بيئة الاختبار المعزولة. يتم إجراء جميع الاختبارات التي تم إجراؤها في فئة حالة الاختبار على هذا الكائن المعزول.

ويتم إجراء اختبارات الدمج لموفّري المحتوى بالطريقة نفسها التي تتّبعها اختبارات الوحدات المعدّة.

العناصر التي يتم اختبارها

في ما يلي بعض الإرشادات الخاصة باختبار موفّري المحتوى.

  • الاختبار باستخدام طرق الحلول: على الرغم من أنّه يمكنك إنشاء مثيل لكائن موفّر في ProviderTestCase2، عليك دائمًا إجراء اختبار باستخدام كائن برنامج تعيين باستخدام معرّف الموارد المنتظم (URI) المناسب. ويضمن ذلك أنك تختبر المزوّد عن طريق إجراء التفاعل نفسه الذي يستخدمه أي تطبيق عادي.
  • اختبار مقدّم خدمة عام كعقد: إذا كنت تنوي أن يكون مقدّم الخدمة علنيًا ومتاحًا للتطبيقات الأخرى، يجب اختباره كعقد. في ما يلي بعض الأمثلة على كيفية إجراء ذلك:
    • نفِّذ اختبارًا باستخدام الثوابت التي يعرضها مقدّم الخدمة بشكل علني. على سبيل المثال، ابحث عن الثوابت التي تشير إلى أسماء الأعمدة في أحد جداول بيانات الموفر. ويجب أن تكون هذه ثوابت دائمًا محددة بشكل علني من قِبل مقدّم الخدمة.
    • اختبِر جميع معرّفات الموارد المنتظمة (URI) التي يوفّرها مقدّم الخدمة. قد يقدم مزود الخدمة العديد من معرفات الموارد المنتظمة (URI)، يشير كل واحد منها إلى جانب مختلف من البيانات.
    • اختبِر معرّفات الموارد المنتظمة (URI) غير الصالحة. ويجب أن يتم تعمّد إجراء اختبارات الوحدة مع المزوّد بعنوان URI غير صالح، والبحث عن الأخطاء. إنّ التصميم الجيد لمقدّم الخدمة هو إصدار IllegalArgumentException لعناوين URI غير صالحة.
  • اختبار تفاعلات مقدّمي الخدمة العادية: يقدّم معظم مقدّمي الخدمات ست طُرق للوصول، وهي: query() وinsert() وdelete() وupdate() وgetType() وonCreate(). يجب أن تتحقق اختباراتك من نجاح جميع هذه الطرق.
  • اختبار منطق العمل: إذا طبّق موفّر المحتوى منطق العمل، يجب عليك اختباره. يشمل منطق العمل التعامل مع القيم غير الصالحة أو الحسابات المالية أو الحسابية أو الحذف أو الجمع بين التكرارات.