اقرأ أولاً اختبار تطبيقك على 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
في أحد المواقع أعلاهانظر Framework / 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
أو لإجراء اختبارات أكثر تعقيدًا ، استخدم أداة اختبار الاتحاد التجاري :
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
جميع الاختبارات ضمن حزمة Java محددة
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 الاختباري إما اختبارات وظيفية أو اختبارات مقاييس ، ومع ذلك فإن المزج بينهما غير مدعوم حاليًا