코드가 실제 하드웨어에 종속된 경우 테스트를 자동화하기 어렵습니다. 예를 들어 연결 상태를 확인하려면 실제 기기를 수동으로 연결하고 연결 해제해야 할 수 있습니다. 오디오 안경과 디스플레이 안경의 다양한 유형, 기능, 기기 상태로 인해 이 문제가 더욱 복잡해질 수 있습니다. 이러한 다양한 사례를 테스트하려면 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를 사용하세요.