Glance를 사용한 단위 테스트

Glance 단위 테스트 API를 사용하면 뷰를 확장하지 않고 Glance 코드를 테스트할 수 있습니다. UI 자동화 도구가 필요할 수 있습니다 예를 들어 단위 테스트 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