Glance를 사용한 단위 테스트

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

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

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