Glance를 사용한 단위 테스트

Glance 단위 테스트 API를 사용하면 뷰를 확장하거나 UI 자동화 도구를 사용하지 않고도 Glance 코드를 테스트할 수 있습니다. 예를 들어 단위 테스트 API를 사용하면 hasContentDescriptionEqualTo 또는 isChecked와 같은 매처를 사용하여 요소가 목록에 있는지 또는 체크박스가 선택되었는지와 같은 조건을 확인할 수 있습니다.

이 API는 가볍고 설정이 덜 필요하므로 위젯의 개별 부분을 개발하고 구성하면서 테스트 주도 개발을 실행하여 코드 재사용을 개선할 수 있습니다.

설정

단위 테스트 라이브러리를 사용하는 데 필요한 종속 항목은 다음 예에 나와 있습니다.

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.0'
testImplementation 'androidx.glance:glance-AppWidget-testing:1.1.0'
testImplementation 'org.robolectric:robolectric:4.11.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

테스트 구조

코드 재사용 및 단위 테스트를 사용 설정하려면 GlanceAppWidget 클래스 외부에서 구성 가능한 함수를 구성합니다. 테스트 대상 단위의 복잡성을 최대한 줄입니다.

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasAuthorAsSubtitle() = runGlanceAppWidgetUnitTest {
        // Prepare inputs and state
        setAppWidgetSize(100.dp, 100.dp)

        // Set the composable under test
        provideComposable {
            MyNewsItemComposable(TEST_NEWS_ITEM)
        }

        // Perform assertions
        onNode(hasTestTag("subTitle"))
            .assertHasText(TEST_NEWS_ITEM.authorName)
    }
}

테스트의 컨텍스트 및 크기 설정

구성 가능한 함수가 LocalContext.current() 메서드를 사용하여 컨텍스트를 읽는 경우 LocalContext.current() 메서드를 사용하여 컨텍스트를 설정해야 합니다. 그 외의 경우에는 이 단계가 선택사항입니다.

Roboletric과 같은 JVM 기반 Android 단위 테스트 프레임워크를 사용하여 컨텍스트를 제공할 수 있습니다.

구성 가능한 함수가 LocalSize에 액세스한다면 테스트에 컴포저블을 제공하기 전에 테스트에 의도된 크기를 설정합니다. 기본 크기는 349.dp x 455.dp이며, 이는 세로 모드의 Pixel 4 기기에 표시되는 5x4 위젯과 같습니다.

  • AppWidget이 sizeMode == Single를 사용하는 경우 위젯의 info.xml 파일에서 minWidthminHeight로 설정할 수 있습니다.
  • AppWidget이 sizeMode == Exact를 사용하는 경우 위젯 크기를 결정하는 것과 유사한 방식으로 테스트할 크기를 식별하고 위젯이 표시될 수 있는 가로 모드 및 세로 모드 크기를 식별하여 테스트할 수 있습니다.
  • AppWidget이 sizeMode == Responsive를 사용하는 경우 sizeMode를 지정할 때 제공한 목록의 크기 중 하나로 설정할 수 있습니다.

테스트 제한 시간의 기본 기간은 1초이지만, 테스트 인프라에서 다른 제한 시간을 적용하는 경우 runGlanceAppWidgetUnitTest 메서드에 맞춤 기간을 인수로 전달할 수 있습니다.

자세한 내용과 코드 샘플은 runGlanceAppWidgetUnitTest 참조 문서를 확인하세요.