Espresso Device API を使用して画面構成の変更をテストする

Espresso Device API を使用して、デバイスに一般的な負荷がかかっている場合にアプリをテストする 構成変更(回転や画面の展開など)が含まれます。Espresso Device API を使用すると、これらの構成変更を仮想デバイスでシミュレートできます。 テストが同期的に実行されるため、1 つの UI アクションまたはアサーションのみが テスト結果の信頼性が高まりますUI の記述が初めての場合 Espresso を使用したテストについては、Espresso のドキュメントをご覧ください。

Espresso Device API を使用するには、次のものが必要です。

  • Android Studio Iguana 以降
  • Android Gradle プラグイン 8.3 以降
  • Android Emulator 33.1.10 以降
  • API レベル 24 以降を搭載している Android 仮想デバイス

Espresso Device API 用にプロジェクトをセットアップする

Espresso Device API をサポートするようにプロジェクトをセットアップする手順は次のとおりです。

  1. テストデバイスにコマンドを渡すには、 androidTest ソースセットのマニフェスト ファイルに対する INTERNET 権限と ACCESS_NETWORK_STATE 権限:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. enableEmulatorControl テストフラグを gradle.properties ファイル:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. モジュール レベルのビルドで emulatorControl オプションを有効にする スクリプト:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Groovy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. モジュール レベルのビルド スクリプトで、Espresso デバイス ライブラリをインポートする をプロジェクトに追加します。

    Kotlin

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:1.0.0-beta01")
      }
      

    Groovy

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.0-beta01'
      }
      

一般的な構成変更に対するテスト

Espresso Device API には、画面の向きと折りたたみ式の状態に関する複数のステータスがあります。 デバイス設定の変更をシミュレートするために使用できます。

画面の回転に対するテスト

これは、デバイス画面が表示されたときにアプリがどのように動作するかをテストする方法の例です rotates:

  1. まず、起動時の状態を一定にするには、デバイスを縦向きにします mode:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. テスト中にデバイスを横向きに設定するテストを作成する 実行:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. 画面が回転したら、UI が想定どおりに新しいレイアウトに適応することを確認します。

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

画面の展開に対するテスト

アプリが折りたたみ式デバイスでどのように動作するかをテストする方法の例 画面が開きます。

  1. まず、折りたたみ状態のデバイスをテストするために、 onDevice().setClosedMode()。アプリのレイアウトが コンパクトな画面幅に適応します

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. 完全に展開された状態に移行するには、 onDevice().setFlatMode()。アプリのレイアウトが 展開されたサイズクラスです

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

テストに必要なデバイスを指定する

折りたたみ動作を実行するテストを 折りたたみ式デバイスの場合、テストは不合格になる可能性が高くなります。関連するテストのみを実行する @RequiresDeviceMode アノテーションを使用します。テストランナー サポートしていないデバイスでのテストの実行を自動的にスキップします。 構成をテストします。各テストにデバイス要件ルールを追加できます。 テストクラス全体を指定できます

たとえば、Android または iOS モバイル デバイスをサポートしているデバイスでのみテストを実行するよう指定するには、 フラット構成に展開するには、次の @RequiresDeviceMode コードを追加します。 追加します。

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}