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