次の方法で共有


Surface Duo でスワイプ ジェスチャをシミュレートする

UiAutomator は、アプリ間のテスト機能とデバイス センサーへのアクセスを提供するテスト フレームワークです。 UiDevice クラスの swipe メソッドとデバイスのディメンションを使うと、テスト中に Surface Duo でさまざまなジェスチャをシミュレートすることができます。

テスト キットは、異なる座標間のスワイプを実行して、アプリのスパン、アプリのスパン解除、画面間のアプリの切り替え、アプリを閉じる、をシミュレートするユーティリティ関数を提供します。

セットアップ

  1. androidTest ディレクトリに新しいテスト クラス ファイルを作成します。 これは、後でテスト規則とテスト用にコード スニペットに追加する場所です。

  2. 最上位の build.gradle ファイルに mavenCentral() リポジトリがあることを確認します。

    allprojects {
        repositories {
            google()
            mavenCentral()
         }
    }
    
  3. 次の依存関係をモジュールレベル build.gradle ファイルに追加します (現在のバージョンは、ここに示されているものとは異なる場合があります)。

    androidTestImplementation "com.microsoft.device.dualscreen.testing:testing-kotlin:1.0.0-alpha4"
    androidTestImplementation "androidx.test.uiautomator:uiautomator:2.2.0"
    androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"
    androidTestImplementation "androidx.test:runner:1.4.0"
    androidTestImplementation "androidx.test:rules:1.4.0"
    
  4. compileSdkVersionが API 33 に設定され、 targetSdkVersion がモジュール レベルの build.gradle ファイルで API 32 以降に設定されていることを確認します。

    android { 
        compileSdkVersion 33
    
        defaultConfig { 
            targetSdkVersion 32 
        } 
        ... 
    }
    
  5. テスト クラス内に TestRuleUiDevice のインスタンスを作成します。

    @get:Rule
    val activityRule = ActivityScenarioRule(MainActivity::class.java)
    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    
  6. Espresso を使ってビューをテストする場合、デバイスでアニメーションを無効にしてください。

テストを記述する方法

テスト キット ライブラリでは、Surface Duo でディスプレイ操作を実行するためのオプションを提供しています。 これらのメソッドはすべて UiDeviceswipe メソッドを使って、異なる座標間のスワイプをシミュレートしています。 テストの信頼性をできるだけ高めるために、スワイプの合間にアサーションとチェックを実行し、各テストで実行するスワイプの回数を最小限に抑えることをお勧めします。

スワイプ ジェスチャを使うテストを作成するには、次の手順に従います。

  1. スワイプ ジェスチャの実行
  2. UI が予期したとおりに変更されたことをアサートする

次のテスト例では、スパン時に 2 つのペインを表示するアプリのシンプルな UI テストを示します。

@Test
fun testSpan() {
    onView(withText("pane 1")).check(matches(isDisplayed()))

    // 1. Perform swipe gesture
    device.spanFromStart()

    // 2. Assert that UI has changed as expected
    onView(withText("pane 1")).check(matches(isDisplayed()))
    onView(withText("pane 2")).check(matches(isDisplayed()))
}

次のアニメーションは、testSpanSurface Duo エミュレーター上で実行されているときにどのように見えるかを示しています。

Surface Duo エミュレーターで実行中の testSpan テスト

サンプル

Surface Duo テストでスワイプ ジェスチャのシミュレーションを使う方法のその他の例については、次のリソースを参照してください。

リソース

インストルメント化されたテストと UiAutomator の詳細については、次のリソースを参照してください。