آزمایش‌های ابزارگری

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

به‌طور خلاصه، آزمایش ابزاربندی محیط اجرای آزمایشی ویژه‌ای را ارائه می‌دهد که ازطریق فرمان am instrument راه‌اندازی می‌شود، در این محیط، فرایند برنامه هدف بازراه‌اندازی می‌شود و با زمینه برنامه پایه مقداردهی اولیه می‌شود، و رشته ابزاربندی در ماشین مجازی فرایند برنامه شروع می‌شود. اجرای کد آزمایشی شما در این رشته ابزار دقیق شروع می‌شود و نمونه Instrumentation که دسترسی به زمینه برنامه و میاناهای برنامه‌سازی کاربردی برای دستکاری فرایند برنامه تحت آزمایش را فراهم می‌کند به آن ارائه می‌شود.

مفاهیم اصلی

  • ابزار دقیق باید در بسته برنامه تعریف شود، با <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. اجرای آزمایش‌ها:

    • ساده‌ترین راه حل استفاده از Atest به این صورت است:

      atest FrameworksCoreTests
      
    • یا برای آزمایش‌های پیچیده‌تر، از Trade Federation test Harness استفاده کنید:

    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. همه آزمایش‌های تحت یک بسته Java خاص

        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 API، ادعای صریحی درباره موفقیت یا عدم موفقیت داشته باشد؛ علاوه‌براین، هرگونه استثنای مدیریت‌نشده نیز باعث شکست عملکردی خواهد شد.

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

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