予測テストルールを使用して仮想デバイスの管理を自動化する

対応する XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
オーディオ グラスと
ディスプレイ グラス

コードが物理ハードウェアに依存している場合、テストを自動化することは困難です。たとえば、接続状態を確認するには、実機を手動で接続したり切断したりする必要があります。オーディオ グラスとディスプレイ グラスにはさまざまなタイプ機能デバイス状態があるため、 この課題はさらに複雑になる可能性があります。このような多様なケースをテストするには、Projected Test Rule API を使用して、プロジェクション テスト環境のセットアップと管理を自動化します。このライブラリは、プロジェクション デバイスの作成、接続状態、機能の検証を処理するため、アプリのコアロジックのテストに集中できます。これらの API を使用すると、ボイラープレート コードを記述せずに堅牢なテストスイートを構築できます。

ライブラリの依存関係を追加する

テストルールを使用するには、アプリの build.gradle ファイルにテスト アーティファクトを追加します。

Groovy

dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}

Kotlin

dependencies {
  // JXR Projected testing library
  testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}

テストルールを設定する

基本的なテストルールを設定するには、テストクラスでルールにアノテーションを付けます。デフォルトでは、各テストの実行前に、ルールによってプロジェクション デバイスが接続され、その視覚機能が有効になります。

@get:Rule
val projectedTestRule = ProjectedTestRule()

private val context: Context
    get() = ApplicationProvider.getApplicationContext()

@Test
fun testWithConnectedDevice() {
    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)

    assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue()
}

その他の一般的なシナリオをテストする

基本的なテストルールを使用してプロジェクション テスト環境を設定したら、オーディオ グラスとディスプレイ グラスのその他の一般的なシナリオをテストして、アプリの機能を確認します。

テストデバイスの切断

グラスとの接続が切断されたときにアプリがどのように反応するかをテストするには、isDeviceConnected プロパティを使用します。

@Test
fun testDeviceDisconnection() {
    // manually disconnect the device via the rule
    projectedTestRule.isDeviceConnected = false

    assertThrows(IllegalStateException::class.java) {
        ProjectedContext.createProjectedDeviceContext(context)
    }
}

コードに関する主なポイント

  • ルールは、テストごとに isDeviceConnected などのプロパティをデフォルト値にリセットします。@After メソッドでこれらのプロパティを手動でリセットする必要はありません。

さまざまなデバイス機能をテストする

ディスプレイ グラスには、Jetpack Compose Glimmer で作成された UI を表示できます。デフォルトでは、ProjectedTestRuleCAPABILITY_VISUAL_UI を有効にします。プロジェクション デバイスがサポートする内容を正確に定義するには、capabilities セットを使用します。これは、グラスにコンテンツを投影する前に、アプリがハードウェア サポートを正しくチェックしていることを確認するのに役立ちます。

@Test
fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity ->
    // disable display capability
    projectedTestRule.capabilities = setOf()

    runBlocking {
        // create the controller
        val controller = ProjectedDeviceController.create(activity)

        // verify the app recognizes the lack of visual UI support
        assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI)
    }
}

コードに関する主なポイント

  • ルールは、テストごとに capabilities などのプロパティをデフォルト値にリセットします。@After メソッドでこれらのプロパティを手動でリセットする必要はありません。
  • ディスプレイ グラスに投影されるアクティビティの動作を具体的に確認する必要がある場合は、launchTestProjectedDeviceActivity を使用します。