隨著應用程式成長,您可能會發現將部分應用程式元件放在應用程式主程序以外的程序中,會很有幫助。如要在這些非預設程序中測試應用程式元件,可以使用 Multiprocess Espresso 的功能。這項工具適用於 Android 8.0 (API 級別 26) 以上版本,可讓您順暢測試跨應用程式程序界線的應用程式 UI 互動,同時維持 Espresso 的同步處理保證。
使用 Multiprocess Espresso 時,請注意下列版本和範圍考量事項:
- 應用程式必須指定 Android 8.0 (API 級別 26) 以上版本。
- 這項工具只能測試您在應用程式套件程序中加入的應用程式元件。無法測試外部程序。
使用工具
如要使用 Multiprocess Espresso 測試應用程式中的程序,請在應用程式的 build.gradle
檔案中新增 espresso-remote 構件的參照:
app/build.gradle
Groovy
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
您也需要在應用程式的 androidTest
資訊清單中新增下列項目:
- 定義程序的
<instrumentation>
元素。 <meta-data>
元素,表示您要使用 Multiprocess Espresso。
下列程式碼片段顯示如何新增這些元素:
src/androidTest/AndroidManifest.xml
<manifest ... package="androidx.test.mytestapp.tests"> <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" /> <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="androidx.test.mytestapp" android:targetProcesses="*"> <meta-data android:name="remoteMethod" android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" /> </instrumentation> </manifest>
上述程式碼片段會向 Android 架構指出,您希望測試應用程式套件中的每個程序。如果只想測試應用程式的部分程序,可以在 targetProcesses
元素中指定以半形逗號分隔的清單:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
瞭解工具架構
測試應用程式並啟動預設程序時,您可能會執行 UI 互動 (例如按下按鈕),在次要程序中啟動活動。系統接著會完成下列步驟,使用 Espresso 啟用跨程序測試:
- Android 架構會建立並啟動新程序,以追蹤應用程式的導覽結構。每個
Instrumentation
程序都包含AndroidJUnitRunner
的新例項。在這個階段,這 2 個插樁程序無法彼此通訊。 - 每個
AndroidJUnitRunner
執行個體都會將 Espresso 註冊為測試架構。 - 這 2 個執行個體會執行交握,以建立彼此之間的連線。
AndroidJUnitRunner
同時,每個AndroidJUnitRunner
執行個體會將所有已註冊的用戶端 (例如 Espresso) 連線至其他程序中的對應項目,以便這些用戶端在彼此之間建立直接通訊管道。 - 每個
AndroidJUnitRunner
執行個體會持續尋找新加入的插樁執行個體和測試架構用戶端,並視需要建立其他通訊管道。
圖 1 說明這項程序的結果:

其他資源
如要進一步瞭解這個主題,請參閱下列資源。
- 2017 年 Google I/O 大會的「Android 測試支援程式庫的 Android 測試導向開發」研討會影片,從 36:41 開始。