상호 운용성

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

Espresso와의 상호 운용성

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

두 유형을 일치시키기 위해 특별한 단계가 필요하지는 않습니다. 조회수 일치 Espresso의 onViewComposeTestRule를 사용한 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)

컴포저블 계층 구조에서 높은 위치에 한 번만 시맨틱 속성을 사용 설정하여 Modifier.testTag가 있는 중첩된 모든 컴포저블에 액세스할 수 있도록 합니다. UiAutomator를 사용하세요.

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와 동일한 tag를 사용하여 By.res(resourceName)의 값을 업데이트합니다.

val device = UiDevice.getInstance(getInstrumentation())

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

추가 리소스

  • Android에서 앱 테스트: 기본 Android 테스트 테스트의 기본사항과 기술을 보다 폭넓게 파악할 수 있습니다.
  • 테스트 기본 요소: 자세히 알아보기 Android 앱 테스트의 핵심 개념을 배웠습니다.
  • 로컬 테스트: 일부 테스트를 실행할 수 있습니다. 실행할 수 있습니다
  • 계측 테스트: 우수함 연습을 해야 합니다 즉, Cloud Build를 사용해 해야 합니다.
  • 지속적 통합: 지속적 통합을 통해 테스트를 배포에 통합할 수 있음 살펴봤습니다
  • 다양한 화면 크기 테스트: 사용자에게 제공할 수 있는 여러 기기이므로 다양한 화면용으로 테스트해야 합니다. 있습니다.
  • Espresso: 뷰 기반 UI, Espresso 지식은 Compose의 일부 측면에 여전히 유용할 수 있음 있습니다.