테스트

접근성을 테스트하는 필수적인 방법은 수동 테스트의 한 형태로, TalkBack이나 스위치 제어와 같은 접근성 서비스를 사용 설정하고 모든 것이 예상대로 작동하는지 확인하는 것입니다. 이를 통해 접근성 요구사항이 있는 사용자가 애플리케이션을 어떻게 경험하는지 직접 파악할 수 있습니다.

수동 인증과 함께 자동 테스트를 사용하여 앱을 지속적으로 변경할 때 사용자 환경에 영향을 줄 수 있는 잠재적인 문제를 신고해야 합니다.

기존 Compose 테스트 API를 사용하면 시맨틱 요소와 상호작용하는 자동화된 테스트를 작성하고 UI에 정의된 속성을 어설션할 수 있습니다.

접근성 검사

자동 접근성 테스트의 경우, Compose 1.8.0부터 접근성 테스트 프레임워크(접근성 검사기와 Espresso의 접근성 검사를 지원하는 동일한 기본 프레임워크)를 사용하여 일부 접근성 관련 검사를 자동으로 실행할 수도 있습니다.

검사를 사용 설정하려면 ui-test-junit4-accessibility 종속 항목을 추가하고 AndroidComposeTestRule에서 enableAccessibilityChecks()를 호출한 후 작업 또는 tryPerformAccessibilityChecks를 트리거합니다.

@Rule
@JvmField
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

@Test
fun noAccessibilityLabel() {
    composeTestRule.setContent {
        Box(
            modifier = Modifier
                .size(50.dp, 50.dp)
                .background(color = Color.Gray)
                .clickable { }
                .semantics {
                    contentDescription = ""
                }
        )
    }

    composeTestRule.enableAccessibilityChecks()

    // Any action (such as performClick) will perform accessibility checks too:
    composeTestRule.onRoot().tryPerformAccessibilityChecks()
}

이 특정 테스트는 예외와 함께 항목에 접근성 서비스에서 읽을 수 있는 라벨이 없을 수 있다는 메시지를 표시하며 실패합니다.

사용 가능한 다른 검사에서는 색상 대비, 작은 터치 영역 크기 또는 요소의 순회 순서와 관련된 접근성 문제를 찾습니다.

Compose와 뷰를 혼합하여 사용하고 있고 이미 AccessibilityValidator를 사용 중이거나 구성해야 하는 경우 규칙에서 설정할 수 있습니다.

@Test
fun lowContrastScreen() {
    composeTestRule.setContent {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(color = Color(0xFFFAFBFC)),
            contentAlignment = Alignment.Center
        ) {
            Text(text = "Hello", color = Color(0xFFB0B1B2))
        }
    }

    // Optionally, set AccessibilityValidator manually
    val accessibilityValidator = AccessibilityValidator()
        .setThrowExceptionFor(
            AccessibilityCheckResult.AccessibilityCheckResultType.WARNING
        )

    composeTestRule.enableAccessibilityChecks(accessibilityValidator)

    composeTestRule.onRoot().tryPerformAccessibilityChecks()
}

수동 테스트와 함께 Compose API와 접근성 테스트 프레임워크를 모두 사용하는 자동 테스트를 사용하면 개발 프로세스 초기에 발생할 수 있는 문제를 감지할 수 있습니다.