폴더블 디바이스에 대한 Jetpack Compose 테스트 작성
Jetpack Compose는 기존 보기 시스템에서 에스프레소가 사용되는 방식과 마찬가지로 레이아웃을 테스트하는 데 사용할 수 있는 테스트 API를 제공합니다. 또한 Jetpack Window Manager는 개체를 쉽게 시뮬레이션을 쉽게 할 수 있는 테스트 라이브러리를 제공합니다. 이러한 리소스를 사용하면 폴더블 및 이중 화면 디바이스에 대한 Compose 프로젝트에서 계측된 UI 테스트를 작성할 수 있습니다.
ComposeTesting 라이브러리
폴더블 테스트를 작성하는 데 필요한 코드 양을 줄이기 위해 테스트 키트의 일부인 ComposeTesting 라이브러리를 사용할 수도 있습니다. 이 라이브러리에는 FoldingFeature
개체를 시뮬레이션하는 유틸리티 메서드와 살짝 밀기 제스처 및 문자열 리소스 도우미 메서드를 포함하여 Compose UI 테스트에 유용한 기타 기능이 포함되어 있습니다.
테스트에서 ComposeTesting 라이브러리를 사용하려면 이 문서의 코드 조각에 대한 ComposeTesting 라이브러리 사용 탭을 클릭해야 합니다.
설치
androidTest 디렉터리에 새 테스트 클래스 파일을 만듭니다. 여기서 나중에 테스트 규칙 및 테스트에 대한 코드 조각을 추가할 것입니다.
최상위 수준 build.gradle 파일에
mavenCentral()
리포지토리가 있는지 확인합니다.allprojects { repositories { google() mavenCentral() } }
모듈 수준 build.gradle 파일에 다음 종속성을 추가합니다(현재 버전은 여기에 표시된 것과 다를 수 있음).
androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.3.0" androidTestImplementation "androidx.window:window-testing:1.0.0" // Only necessary if Jetpack Window Manager isn't imported for implementation androidTestImplementation "androidx.window:window:1.0.0"
가
compileSdkVersion
API 33으로 설정되고targetSdkVersion
가 모듈 수준 build.gradle 파일에서 API 32 이상으로 설정되어 있는지 확인합니다.android { compileSdkVersion 33 defaultConfig { targetSdkVersion 32 } ... }
Compose 검사를 수행하고 접기 기능을 시뮬레이션할 수 있는
TestRule
를 만듭니다. 게시자 규칙과 Android Compose 테스트 규칙이라는 두 규칙을WindowLayoutInfo
함께 연결하여 이 작업을 수행할 수 있습니다.private val composeTestRule = createAndroidComposeRule<MainActivity>() private val publisherRule = WindowLayoutInfoPublisherRule() @get:Rule val testRule: TestRule init { testRule = RuleChain.outerRule(publisherRule).around(composeTestRule) }
테스트를 작성하는 방법
폴더블 및 이중 화면 디바이스에 대한 Compose 테스트를 작성하려면 다음 네 단계를 수행합니다.
- 테스트 내용 설정
FoldingFeature
시뮬레이션- 테스트할 노드 찾기
- 노드에서 어설션 또는 작업 수행
아래 코드 조각은 수직 FoldingFeature
가 있을 때 "pane 1" 및 "pane 2" 텍스트 요소가 TwoPaneSample
컴포저블에 표시되는지 확인하는 테스트 예시를 보여줍니다.
@Test
fun sample_verticalFoldingFeature_showsTwoPanes() {
// 1. Optional: set the content of the test (default is MainActivity content)
composeTestRule.activity.setContent {
TwoPaneSample()
}
// 2. Simulate a vertical FoldingFeature
composeTestRule.activityRule.scenario.onActivity { activity ->
val verticalFoldingFeature = FoldingFeature(
activity = activity,
orientation = FoldingFeature.Orientation.VERTICAL
)
val windowLayoutInfo = TestWindowLayoutInfo(listOf(verticalFoldingFeature))
publisherRule.overrideWindowLayoutInfo(windowLayoutInfo)
}
// 3. Find the nodes to test and 4. Perform assertions on the nodes
composeTestRule.onNodeWithText("pane 1").assertIsDisplayed()
composeTestRule.onNodeWithText("pane 2").assertIsDisplayed()
}
고유한 테스트를 작성할 때 요구 사항에 따라 각 단계를 사용자 지정할 수 있습니다. 모든 컴포저블은 setContent
람다에 포함될 수 있으며 setContent
의 위치, 크기, 방향 및 상태를 변경할 수 있습니다.
리소스
Jetpack Compose 및 Jetpack Window Manager를 사용한 테스트에 대해 자세히 알아보려면 다음 리소스를 참조하세요.