儀器測試

首先閱讀在developer.android.com 上測試您的應用程式。請注意,在平台測試中使用儀器測試的方式存在一些差異。

總之,插裝測試提供了一個透過am instrument命令啟動的特殊測試執行環境,其中目標應用程式進程使用基本應用程式上下文重新啟動和初始化,並且插裝執行緒在應用程式進程 VM 內啟動。您的測試程式碼開始在此檢測執行緒上執行,並提供一個Instrumentation實例,該實例提供對應用程式上下文和 API 的訪問,以操作被測應用程式進程。

關鍵概念

  • 必須在應用程式包中聲明檢測,並在應用程式包清單的<manifest>標記下嵌套<instrumentation>標記。
  • 從技術上講,應用程式包清單可能包含多個<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.xmlAndroid.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. 特定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 可以是功能測試或指標測試,但目前不支援混合兩者