اقرأ أولاً اختبار تطبيقك على موقع Developer.android.com. لاحظ أن هناك بعض الاختلافات في كيفية استخدام اختبارات الأجهزة في اختبار النظام الأساسي.
باختصار، يوفر اختبار الأجهزة بيئة تنفيذ اختبار خاصة كما يتم تشغيلها عبر أمر am instrument
، حيث تتم إعادة تشغيل عملية التطبيق المستهدفة وتهيئتها باستخدام سياق التطبيق الأساسي، ويتم بدء سلسلة الأجهزة داخل VM لعملية التطبيق. يبدأ كود الاختبار الخاص بك في التنفيذ على مؤشر ترابط الأجهزة هذا ويتم تزويده بمثيل Instrumentation
الذي يوفر الوصول إلى سياق التطبيق وواجهات برمجة التطبيقات لمعالجة عملية التطبيق قيد الاختبار.
المفاهيم الرئيسية
- يجب الإعلان عن الأجهزة في حزمة تطبيق، مع وضع علامة
<instrumentation>
ضمن علامة<manifest>
الخاصة ببيان حزمة التطبيق. - من الناحية الفنية، قد يحتوي بيان حزمة التطبيق على علامات
<instrumentation>
متعددة، على الرغم من أنه ليس شائع الاستخدام بهذه الطريقة. - يجب أن تحتوي كل
<instrumentation>
على:- سمة
android:name
: يجب أن تكون اسم فئة فرعية منInstrumentation
المضمنة في تطبيق الاختبار، والذي عادةً ما يكون مشغل الاختبار المستخدم، على سبيل المثال:android.support.test.runner.AndroidJUnitRunner
- يجب تحديد سمة
android:targetPackage
. يجب تعيين قيمته على حزمة التطبيق قيد الاختبار.
- سمة
ملخص الخطوات
فيما يلي الوجهات الشائعة للاختبارات المحكم مقابل خدمات إطار العمل:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
إذا كنت تقوم بإضافة وحدة أدوات جديدة تمامًا للمكون الخاص بك، فراجع
اتبع الاتفاقية الحالية إذا كنت تقوم بإضافة اختبارات إلى أحد المواقع المذكورة أعلاه. إذا كنت تقوم بإعداد وحدة اختبار جديدة، فيرجى اتباع إعداد
AndroidManifest.xml
وAndroid.mk
في أحد المواقع أعلاهراجع Frameworks/base/core/tests/coretests/ للحصول على مثال. لاحظ أن هذه السطور تقوم بتثبيت تطبيقات إضافية:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
لا تنس وضع علامة على اختبارك كـ
@SmallTest
أو@MediumTest
أو@LargeTest
قم ببناء وحدة الاختبار باستخدام m، على سبيل المثال:
m FrameworksCoreTests
تشغيل الاختبارات:
الحل الأبسط هو استخدام Atest كما يلي:
atest FrameworksCoreTests
أو بالنسبة للاختبارات الأكثر تعقيدًا، استخدم اختبار الاتحاد التجاري Harness :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
إذا لم تكن تستخدم Tradefed، فقم بتثبيت الاختبارات وتشغيلها يدويًا:
- قم بتثبيت APK الذي تم إنشاؤه:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
قم بإجراء الاختبارات بخيارات مختلفة:
جميع الاختبارات في apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
كافة الاختبارات ضمن حزمة جافا محددة
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
جميع الاختبارات تحت فئة معينة
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
طريقة اختبار محددة
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
يمكن للاختبار الخاص بك تقديم تأكيد صريح على النجاح أو الفشل باستخدام JUnit
APIs؛ بالإضافة إلى ذلك، فإن أي استثناءات لم يتم اكتشافها ستتسبب أيضًا في فشل وظيفي.
لإصدار مقاييس الأداء، يمكن لرمز الاختبار الخاص بك استدعاء Instrumentation#sendStatus
لإرسال قائمة بأزواج القيمة الرئيسية. ومن المهم أن نلاحظ أن:
- يمكن أن تكون المقاييس عددًا صحيحًا أو نقطة عائمة
- سيتم تجاهل أي قيم غير رقمية
- يمكن أن يكون ملف APK الاختباري إما اختبارات وظيفية أو اختبارات مقاييس، إلا أن المزج بين الاثنين غير مدعوم حاليًا