Glance 단위 테스트 API를 사용하면 뷰를 확장하거나 UI Automator를 사용하지 않고도 Glance 코드를 테스트할 수 있습니다. 예를 들어 단위 테스트 API를 사용하면 hasContentDescriptionEqualTo 또는 isChecked와 같은 매처를 사용하여 요소가 목록에 있는지 또는 체크박스가 선택되었는지와 같은 조건을 확인할 수 있습니다.
이 API는 가볍고 설정이 덜 필요하므로 위젯의 개별 부분을 개발하고 구성하여 코드 재사용을 개선하면서 테스트 기반 개발을 수행할 수 있습니다.
설정
단위 테스트 라이브러리를 사용하는 데 필요한 종속 항목은 다음 예에 나와 있습니다.
// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.
테스트 구조
코드 재사용 및 단위 테스트를 사용 설정하려면 GlanceAppWidget 클래스 외부에서 구성 가능한 함수를 구성합니다. 테스트 중인 단위의 복잡성을 최대한 줄입니다.
provideComposable를 사용하여 테스트 컴포저블을 타겟팅하고 onNode 또는 onAllNodes를 사용하여 하나 이상의 Glance 노드에서 단위 테스트를 실행할 수 있습니다.
private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!" class MyGlanceComposableTest { @Test fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest { // Set the composable to test provideComposable { MyNewsItemComposable(FAKE_HEADLINE) } // Perform assertions onNode(hasTestTag("headline")) .assertHasText(FAKE_HEADLINE) } @Composable fun MyNewsItemComposable(headline: String) { Row { Text( text = headline, modifier = GlanceModifier.semantics { testTag = "headline" }, ) } } }
테스트의 컨텍스트 및 크기 설정
구성 가능한 함수가 LocalContext.current() 메서드를 사용하여 컨텍스트를 읽는 경우 setContext()를 사용하여 컨텍스트를 설정해야 합니다. 그 외의 경우 이 단계는 선택사항입니다.
Robolectric과 같은 JVM 기반 Android 단위 테스트 프레임워크를 사용하여 컨텍스트를 제공할 수 있습니다.
구성 가능한 함수가 LocalSize에 액세스하는 경우 테스트에서 컴포저블을 제공하기 전에 테스트의 의도된 크기를 설정합니다. 기본 크기는 349.dp x 455.dp이며, 이는 세로 모드의 Pixel 4 기기에 표시되는 5x4 위젯과 같습니다.
- AppWidget에서
sizeMode == Single를 사용하는 경우 위젯의info.xml파일에서 이를minWidth및minHeight로 설정할 수 있습니다. - AppWidget에서
sizeMode == Exact를 사용하는 경우 위젯 크기를 결정하는 방법과 유사한 방식으로 테스트할 크기를 식별하고 위젯이 표시될 수 있는 가로 모드 및 세로 모드 크기를 식별하여 테스트할 수 있습니다. - AppWidget에서
sizeMode == Responsive를 사용하는 경우sizeMode를 지정할 때 제공하는 목록의 크기 중 하나로 설정할 수 있습니다.
테스트 제한 시간의 기본 기간은 1초이지만 테스트 인프라에서 다른 제한 시간을 적용하는 경우 맞춤 기간을 runGlanceAppWidgetUnitTest 메서드에 인수로 전달할 수 있습니다.
자세한 내용과 코드 샘플은 runGlanceAppWidgetUnitTest 참고 문서를 확인하세요.