تست های ابزار دقیق

ابتدا بخش «برنامه خود را در developer.android.com آزمایش کنید» را بخوانید. توجه داشته باشید که تفاوت‌هایی در نحوه استفاده از تست‌های ابزار دقیق در تست پلتفرم وجود دارد.

به طور خلاصه، یک تست Instrumentation یک محیط اجرای تست ویژه را فراهم می‌کند که از طریق دستور am instrument راه‌اندازی می‌شود، که در آن فرآیند برنامه مورد نظر مجدداً راه‌اندازی و با زمینه برنامه اولیه مقداردهی اولیه می‌شود و یک thread instrumentation در داخل ماشین مجازی فرآیند برنامه آغاز می‌شود. کد تست شما اجرا را روی این thread instrumentation آغاز می‌کند و یک نمونه Instrumentation در اختیار شما قرار می‌گیرد که دسترسی به زمینه برنامه و APIها را برای دستکاری فرآیند برنامه تحت آزمایش فراهم می‌کند.

مفاهیم کلیدی

  • یک ابزار دقیق باید در یک بسته برنامه، با یک برچسب <instrumentation> که زیر برچسب <manifest> مانیفست بسته برنامه قرار دارد، اعلان شود.
  • یک مانیفست بسته برنامه از نظر فنی ممکن است شامل چندین تگ <instrumentation> باشد، اگرچه معمولاً به این شکل استفاده نمی‌شود.
  • هر <instrumentation> باید شامل موارد زیر باشد:
    • یک ویژگی android:name : باید نام یک زیرکلاس از Instrumentation باشد که در برنامه آزمایشی گنجانده شده است، که معمولاً اجراکننده آزمایشی است که استفاده می‌شود، مثلاً: android.support.test.runner.AndroidJUnitRunner
    • یک ویژگی android:targetPackage باید تعریف شود. مقدار آن باید برابر با بسته برنامه تحت آزمایش باشد.

خلاصه مراحل

  1. در زیر مقاصد رایج برای آزمایش‌های هرمتیک در برابر سرویس‌های چارچوب آمده است:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    اگر در حال اضافه کردن یک ماژول ابزار دقیق کاملاً جدید برای قطعه خود هستید، به [مطالب] مراجعه کنید.

  2. اگر می‌خواهید تست‌ها را در یکی از مکان‌های بالا اضافه کنید، از قرارداد موجود پیروی کنید. اگر می‌خواهید یک ماژول تست جدید راه‌اندازی کنید، لطفاً تنظیمات AndroidManifest.xml و Android.mk را در یکی از مکان‌های بالا دنبال کنید.

  3. برای مثال به frameworks/base/core/tests/coretests/ مراجعه کنید. به این خطوط که برنامه‌های اضافی را نصب می‌کنند توجه کنید:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. فراموش نکنید که تست خود را به صورت @SmallTest ، @MediumTest یا @LargeTest علامت‌گذاری کنید.

  5. ماژول تست را با m بسازید، مثلاً:

    m FrameworksCoreTests
    
  6. تست‌ها را اجرا کنید:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. اگر از Tradefed استفاده نمی‌کنید، تست‌ها را به صورت دستی نصب و اجرا کنید:

    1. apk تولید شده را نصب کنید:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. تست‌ها را با گزینه‌های مختلف اجرا کنید:

      1. تمام تست‌های موجود در apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. همه تست‌ها تحت یک بسته جاوای خاص

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. تمام تست‌های مربوط به یک کلاس خاص

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. یک روش آزمایش خاص

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

تست شما می‌تواند با استفاده از JUnit APIs، در صورت قبول یا رد شدن، به طور صریح اعلام کند؛ علاوه بر این، هرگونه استثنای ثبت نشده نیز باعث خرابی عملکردی خواهد شد.

برای انتشار معیارهای عملکرد، کد آزمایشی شما می‌تواند Instrumentation#sendStatus فراخوانی کند تا لیستی از جفت‌های کلید-مقدار را ارسال کند. توجه به این نکته مهم است که:

  1. معیارها می‌توانند عدد صحیح یا ممیز شناور باشند
  2. هر مقدار غیر عددی حذف خواهد شد
  3. تست apk شما می‌تواند یا تست‌های عملکردی یا تست‌های معیار باشد، با این حال، ترکیب هر دو در حال حاضر پشتیبانی نمی‌شود