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
와 동일한 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 앱 테스트의 핵심 개념을 자세히 알아봅니다.
- 로컬 테스트: 일부 테스트는 자체 워크스테이션에서 로컬로 실행할 수 있습니다.
- 계측 테스트: 계측 테스트도 실행하는 것이 좋습니다. 즉, 기기에서 직접 실행되는 테스트입니다.
- 지속적 통합: 지속적 통합을 사용하면 테스트를 배포 파이프라인에 통합할 수 있습니다.
- 다양한 화면 크기 테스트: 사용자가 사용할 수 있는 기기가 많으므로 다양한 화면 크기를 테스트해야 합니다.
- Espresso: 뷰 기반 UI를 위한 것이지만 Espresso 지식은 여전히 Compose 테스트의 일부 측면에 유용할 수 있습니다.