반응형
[안드로이드] Jetpack Compose UI Test 맛보기
사이드 프로젝트를 진행하면서 UI Preview가 존재하지만 Test 코드는 어떻게 짜야할지 찾아보았습니다.
https://developer.android.com/codelabs/jetpack-compose-testing?hl=ko#0
의존성 추가
// libs.versions.tomi
ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
// build-logic
class AndroidTestPlugin : Plugin<Project> {
override fun apply(target: Project): Unit = with(target) {
//...
dependencies {
//...
"androidTestImplementation"(libs.findLibrary("ui.test.junit4").get())
"debugImplementation"(libs.findLibrary("ui.test.manifest").get())
//...
}
}
}
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$rootProject.composeVersion"
테스트 형식
- composeTestRule{.finder}{.assertion}{.action}
- finder - 원하는 UI 요소 쿼리
- assertion - 해당 UI 요소가 조건에 대하여 참 거짓 판별
- action - 해당 UI 요소에 action 취함
테스트 시작
class SignInDefaultScreenTest {
@get:Rule
val composeRule = createComposeRule()
}
- createComposeRule을 이용하면 테스트 중인 Compose 콘텐츠를 설정하고 이와 상호작용할 수 있음
테스트 예시 - UI 존재 여부
class SignInDefaultScreenTest {
@get:Rule
val composeRule = createComposeRule()
@Test
internal fun `구글_로그인_버튼이_존재하는지_확인`() {
composeRule.setContent {
SignInDefaultScreen()
}
Thread.sleep(1000)
composeRule.onNodeWithText("Google Sign In").assertExists()
}
}
- 해당 코드는 “Google Sign In” 이라는 Text를 가진 노드를 찾고 그것이 적인 text와 일치하는지 참 거짓을 판별하는 코드
테스트 예시 - 버튼 클릭 이벤트
class SignInDefaultScreenTest {
@get:Rule
val composeRule = createComposeRule()
@Test
internal fun `구글_로그인_버튼이_클릭_이벤트_확인`() {
var result = false
composeRule.setContent {
SignInDefaultScreen(
onClickGoogleSignIn = {
result = true
}
)
}
Thread.sleep(1000)
composeRule.onNodeWithText("Google Sign In").performClick()
Assert.assertTrue(result)
}
}
- "Google Sign In"를 가진 UI에 performClick() Action
- 이후 해당 UI의 클릭 이벤트를 통하여 result가 true로 설정되었는지 테스트
반응형
'Android > Compose' 카테고리의 다른 글
아이나비 맵 SDK Compose로 사용해보기 (1) | 2024.09.02 |
---|---|
[안드로이드] Inner Shadow, Drop Shadow 처리하는 방법 (1) | 2024.06.10 |
[안드로이드] Compose 밑줄 텍스트와 클릭 가능하게 만들기 (0) | 2024.05.04 |
[안드로이드] Composable 함수의 속성 (0) | 2024.04.08 |
[안드로이드] Composable 함수 알아보기 (0) | 2024.03.31 |