다음을 통해 공유


폴더블 디바이스에 대한 Jetpack Compose 테스트 작성

Jetpack Compose는 기존 보기 시스템에서 에스프레소가 사용되는 방식과 마찬가지로 레이아웃을 테스트하는 데 사용할 수 있는 테스트 API를 제공합니다. 또한 Jetpack Window Manager는 개체를 쉽게 시뮬레이션을 쉽게 할 수 있는 테스트 라이브러리를 제공합니다. 이러한 리소스를 사용하면 폴더블 및 이중 화면 디바이스에 대한 Compose 프로젝트에서 계측된 UI 테스트를 작성할 수 있습니다.

ComposeTesting 라이브러리

폴더블 테스트를 작성하는 데 필요한 코드 양을 줄이기 위해 테스트 키트의 일부인 ComposeTesting 라이브러리를 사용할 수도 있습니다. 이 라이브러리에는 FoldingFeature 개체를 시뮬레이션하는 유틸리티 메서드와 살짝 밀기 제스처 및 문자열 리소스 도우미 메서드를 포함하여 Compose UI 테스트에 유용한 기타 기능이 포함되어 있습니다.

테스트에서 ComposeTesting 라이브러리를 사용하려면 이 문서의 코드 조각에 대한 ComposeTesting 라이브러리 사용 탭을 클릭해야 합니다.

설치

  1. androidTest 디렉터리에 새 테스트 클래스 파일을 만듭니다. 여기서 나중에 테스트 규칙 및 테스트에 대한 코드 조각을 추가할 것입니다.

  2. 최상위 수준 build.gradle 파일에 mavenCentral() 리포지토리가 있는지 확인합니다.

    allprojects {
        repositories {
            google()
            mavenCentral()
         }
    }
    
  3. 모듈 수준 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"
    
  4. compileSdkVersion API 33으로 설정되고 targetSdkVersion 가 모듈 수준 build.gradle 파일에서 API 32 이상으로 설정되어 있는지 확인합니다.

    android { 
        compileSdkVersion 33
    
        defaultConfig { 
            targetSdkVersion 32
        } 
        ... 
    }
    
  5. 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 테스트를 작성하려면 다음 네 단계를 수행합니다.

  1. 테스트 내용 설정
  2. FoldingFeature 시뮬레이션
  3. 테스트할 노드 찾기
  4. 노드에서 어설션 또는 작업 수행

아래 코드 조각은 수직 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를 사용한 테스트에 대해 자세히 알아보려면 다음 리소스를 참조하세요.