次の方法で共有


UI テストで FoldingFeature をシミュレートする

Jetpack Window Manager には、モック FoldingFeature オブジェクトを作成することができるテスト ライブラリが用意されています。 モック折りたたみ機能を作成することで、UI テスト時に折りたたみ型デバイスでのアプリの動作をテストできます。

テスト キットには、複数の市場デバイスの寸法に一致する折りたたみ機能など、さまざまなプロパティを持つ折りたたみ機能をシミュレートできるユーティリティ関数が備わっています。

セットアップ

  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.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. UI チェックを実行し、折りたたみ機能をシミュレートできる TestRule を作成します。 これを行うには、WindowLayoutInfo 発行元規則と、アクティビティ シナリオまたは Compose テスト規則という 2 つの規則を連結します。

    private val activityRule = ActivityScenarioRule(MainActivity::class.java)
    private val publisherRule = createWindowLayoutInfoPublisherRule()
    
    @get:Rule
    val testRule: TestRule
    
    init {
        testRule = RuleChain.outerRule(publisherRule).around(activityRule)
    }
    
  6. Espresso を使ってビューをテストする場合、デバイスでアニメーションを無効にしてください。

テストを記述する方法

テスト キット ライブラリでは、さまざまなプロパティを持つ折りたたみ機能をシミュレートするための複数のオプションが用意されています。 Jetpack Window Manager テスト ドキュメントのガイダンスにより、1 つのテストごとに 1 つの折りたたみ機能のみをシミュレートすることをお勧めします。

折りたたみ機能をシミュレートするテストを作成するには、次の手順に従います。

  1. 折りたたみ機能をシミュレートする
  2. UI が予期したとおりに変更されたことをアサートする

次のテスト例では、縦方向の折りたたみ機能がある場合に、2 つのペインを表示するアプリのシンプルな UI テストを示しています。

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

    // 1. Simulate a folding feature
    publisherRule.simulateVerticalFoldingFeature(activityRule)

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

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

Surface Duo エミュレーターで実行されている testVerticalFoldingFeature テスト

サンプル

折りたたみ型のテストで折りたたみ機能のシミュレーションを使う方法のその他の例については、次のリソースを参照してください。

リソース

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