예상 테스트 규칙으로 가상 기기 관리 자동화

projectedtestrule, 가상 기기 관리

적용 가능한 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를 사용하세요.