상호 운용성

Compose는 일반적인 테스트 프레임워크와 통합됩니다.

Espresso와의 상호 운용성

하이브리드 앱에서는 Compose 컴포저블 내부의 뷰 계층 구조 및 뷰에서 (AndroidView 컴포저블을 통해) Compose 구성요소를 찾을 수 있습니다.

두 유형을 일치시키기 위해 특별한 단계가 필요하지는 않습니다. Espresso의 onView로 뷰를 일치시키고 ComposeTestRule로 Compose 요소를 일치시킵니다.

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

UiAutomator와의 상호 운용성

기본적으로 컴포저블은 편리한 설명자 (표시된 텍스트, 콘텐츠 설명 등)를 통해서만 UiAutomator에 액세스할 수 있습니다. Modifier.testTag를 사용하는 모든 컴포저블에 액세스하려면 특정 컴포저블의 하위 트리에 testTagsAsResourceId 시맨틱 속성을 사용 설정해야 합니다. 이 동작을 사용 설정하면 스크롤 가능한 컴포저블과 같이 다른 고유 핸들이 없는 컴포저블 (예: LazyColumn)에 유용합니다.

UiAutomator에서 Modifier.testTag와 함께 중첩된 모든 컴포저블에 액세스할 수 있도록 컴포저블 계층 구조에서 한 번만 시맨틱 속성을 사용 설정합니다.

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

Modifier.testTag(tag)를 포함하는 모든 컴포저블은 resourceName과 동일한 tagBy.res(resourceName)을 사용하여 액세스할 수 있습니다.

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

추가 리소스

  • Android에서 앱 테스트: 기본 Android 테스트 방문 페이지에서는 테스트 기본사항과 기법을 더 폭넓게 살펴볼 수 있습니다.
  • 테스트의 기본사항: Android 앱 테스트의 핵심 개념을 자세히 알아봅니다.
  • 로컬 테스트: 일부 테스트는 자체 워크스테이션에서 로컬로 실행할 수 있습니다.
  • 계측 테스트: 계측 테스트도 실행하는 것이 좋습니다. 즉, 기기에서 직접 실행되는 테스트입니다.
  • 지속적 통합: 지속적 통합을 사용하면 테스트를 배포 파이프라인에 통합할 수 있습니다.
  • 다양한 화면 크기 테스트: 사용자가 사용할 수 있는 기기가 많으므로 다양한 화면 크기를 테스트해야 합니다.
  • Espresso: 뷰 기반 UI용이지만 Espresso 지식은 Compose 테스트의 일부 측면에도 유용할 수 있습니다.