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

対象の 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 メソッドでこれらのプロパティを手動でリセットする必要はありません。
  • ディスプレイ グラス(TBC)に投影されるアクティビティの動作を検証する必要がある場合は、launchTestProjectedDeviceActivity を使用します。