コードが物理ハードウェアに依存している場合、テストを自動化することは困難です。たとえば、接続状態を確認するために、物理デバイスを手動で接続したり切断したりする必要があるかもしれません。オーディオ グラスやディスプレイ グラスには、さまざまなタイプ、機能、デバイスの状態があるため、この課題はさらに複雑になる可能性があります。この多様なケースをテストするには、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 を表示できます。デフォルトでは、ProjectedTestRule は CAPABILITY_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を使用します。