アプリの拡張に合わせて、アプリ コンポーネントをいくつか配置すると役立つことがあります。 アプリのメインプロセス以外のプロセスで 実行されることがありますこれらのコンポーネントで デフォルト以外のプロセスでは、マルチプロセス Espresso の機能を使用できます。 このツールは Android 8.0(API レベル 26)以降で利用可能で、次のことができます。 アプリのプロセス間にわたるアプリの UI インタラクションをシームレスにテストする Espresso の同期の保証を維持します。
マルチプロセス Espresso を使用する際は、次のバージョニングとスコープを維持してください 留意してください。
- アプリの対象 OS は、Android 8.0(API レベル 26)以上にする必要があります。
- このツールは、 パッケージ化されています。外部プロセスはテストできません。
ツールの使用
マルチプロセス 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>
要素。 - マルチプロセス Espresso を使用することを示す
<meta-data>
要素。
次のコード スニペットに、上記要素の追加方法を示します。
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
プロセス Pod の新しいインスタンスがAndroidJUnitRunner
。 この段階では、2 つのインストルメンテーション プロセスは、 あります。 - 各
AndroidJUnitRunner
インスタンスが Espresso をテスト フレームワークとして登録する。 - この 2 つのインスタンスは、
AndroidJUnitRunner
handshake を実行して相互に接続を確立する。同じ 時間、AndroidJUnitRunner
Espresso などのすべての登録済みクライアントをそれぞれのクライアントに接続する クライアントが 1 対 1 のダイレクト レスポンスを 通信チャネルを確立します。 - 各
AndroidJUnitRunner
インスタンスは新しく追加されたインストルメンテーション インスタンスを継続的に探し、テスト 必要に応じて追加の通信チャネルを確立します。
図 1 に、この手順の結果を示します。
![](https://developer.android.com/static/images/training/testing/multiprocess_espresso.png?authuser=0000&hl=ja)
参考情報
このトピックに関するその他の情報については、次のリソースをご覧ください。
- Android テストサポートを使用した Android でのテスト駆動開発 ライブラリ Google I/O 2017 のセッション動画を 36:41 からご覧ください。