首先,請參閱 developer.android.com 上的「測試應用程式」。請注意,在平台測試中使用檢測設備測試的方式有所不同。
總而言之,檢測設備測試會透過 am instrument
指令啟動特殊的測試執行環境,在該環境中,系統會重新啟動目標應用程式程序,並使用基本應用程式內容進行初始化,並在應用程式程序 VM 中啟動檢測設備執行緒。您的測試程式碼會在此檢測執行緒上開始執行,並提供給 Instrumentation
執行個體,提供應用程式結構定義的存取權和 API,用於操控測試中的應用程式程序。
核心概念
- 您必須在應用程式套件中宣告檢測作業,並在應用程式套件資訊清單的
<manifest>
標記底下使用巢狀結構的<instrumentation>
標記。 - 應用程式套件資訊清單在技術上可包含多個
<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 測試輔助工具:
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 可以是功能測試或指標測試,但目前不支援混合使用這兩種 APK