في حال استخدام موفِّر محتوى لتخزين البيانات واستردادها أو تجعل البيانات متاحة للتطبيقات الأخرى، فيجب عليك اختبار مزود الخدمة لديك للتأكد أنه لا يتصرف بطريقة غير متوقعة. يشرح هذا الدرس كيفية اختبار الإعدادات العامة ومزودي المحتوى، ويسريون أيضًا على مقدمي الخدمات الذين تحافظ على خصوصيتهم تطبيقك الخاص.
إنشاء اختبارات تكامل لموفّري المحتوى
يتيح لك موفّرو المحتوى الوصول إلى بيانات المستخدمين الفعلية، لذا من المهم التأكّد من أنّ اختبار موفّر المحتوى في بيئة اختبار معزولة. هذا النمط بتشغيل تبعيات البيانات المحددة بشكل صريح فقط في حالة الاختبار. ويعني ذلك أيضًا أنّ اختباراتك لا تعدّل بيانات المستخدمين الفعلية. بالنسبة على سبيل المثال، ينبغي أن تتجنب كتابة اختبار فشل بسبب عدم وجود بيانات من اختبار سابق. وبالمثل، يجب أن يتجنب الاختبار إضافة أو حذف معلومات الاتصال الفعلية لدى أحد المزودين.
لاختبار موفّر المحتوى بشكل منفصل، يمكنك استخدام ProviderTestCase2
.
الصف. تسمح لك هذه الفئة باستخدام فئات كائنات Android الوهمية مثل
IsolatedContext
وMockContentResolver
للوصول إلى الملف
معلومات قاعدة البيانات دون التأثير على بيانات المستخدم الفعلية.
يجب كتابة اختبار الدمج كفصل اختبار من JUnit 4. معرفة المزيد حول إنشاء صفوف اختبار JUnit 4 واستخدام تأكيدات JUnit 4، راجع إنشاء صف اختبار الوحدة المحلية.
لإنشاء اختبار دمج لموفّر المحتوى، يجب تنفيذ ما يلي: الخطوات:
- أنشِئ صف الاختبار كفئة فرعية من
ProviderTestCase2
. - حدِّد فئة
AndroidJUnitRunner
التي يوفّرها AndroidX Test. ليكون عدّاء الاختبار الافتراضي - اضبط الكائن
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()
ويجب أن تتأكّد اختباراتك من أنّ جميع هذه الطرق ناجحة. - اختبار منطق الأعمال: إذا نفّذ موفّر المحتوى منطق الأعمال، CANNOT TRANSLATE اختباره. ويشمل منطق الأعمال التعامل مع القيم غير الصالحة أو القيم المالية العمليات الحسابية أو حذف أو جمع التكرارات.