projectedtestrule、仮想デバイス管理
コードが物理ハードウェアに依存している場合、テストを自動化することは困難です。たとえば、接続状態を確認するには、実機を手動で接続したり切断したりする必要があります。オーディオ グラスとディスプレイ グラスにはさまざまなタイプ、 機能、デバイス状態があるため、 この課題はさらに複雑になる可能性があります。このような多様なケースをテストするには、 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メソッドでこれらのプロパティを手動でリセットする必要はありません。 - ディスプレイ グラスに投影されるアクティビティの動作を具体的に確認する必要がある場合は、
launchTestProjectedDeviceActivityを使用します。