ابتدا برنامه خود را در developer.android.com بخوانید. توجه داشته باشید که تفاوت هایی در نحوه استفاده از تست های ابزار دقیق در تست پلت فرم وجود دارد.
به طور خلاصه، یک تست ابزار دقیق، یک محیط اجرای آزمون ویژه را فراهم می کند که از طریق دستور am instrument
راه اندازی می شود، جایی که فرآیند برنامه هدفمند مجدداً راه اندازی می شود و با زمینه برنامه اصلی شروع می شود، و یک رشته ابزار دقیق در داخل فرآیند برنامه کاربردی VM شروع می شود. کد آزمایشی شما اجرا را در این رشته ابزار دقیق شروع می کند و با یک نمونه Instrumentation
ارائه می شود که دسترسی به زمینه برنامه و API ها را برای دستکاری فرآیند برنامه تحت آزمایش فراهم می کند.
مفاهیم کلیدی
- یک ابزار دقیق باید در یک بسته برنامه اعلام شود، با یک تگ
<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
را در یکی از مکانهای بالا دنبال کنید.به عنوان مثال به frames/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
همه تست ها تحت یک بسته جاوا خاص
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
آزمون شما می تواند با استفاده از API های JUnit
یک ادعای صریح در مورد قبولی یا عدم موفقیت داشته باشد. علاوه بر این، هر گونه استثناء کشف نشده نیز باعث خرابی عملکردی می شود.
برای انتشار معیارهای عملکرد، کد آزمایشی شما میتواند Instrumentation#sendStatus
تماس بگیرد تا فهرستی از جفتهای کلید-مقدار ارسال شود. توجه به این نکته ضروری است که:
- معیارها می توانند عدد صحیح یا ممیز شناور باشند
- هر مقدار غیر عددی حذف خواهد شد
- apk آزمایشی شما میتواند تستهای عملکردی یا تستهای معیار باشد، اما ترکیب هر دو در حال حاضر پشتیبانی نمیشود