- 학습 목표: 안드로이드에서 통합 테스트 작성법 학습
- 학습 항목:
- Android Instrumentation 개념 이해
- Espresso를 활용한 UI 테스트 기본
- View와 ViewModel을 함께 테스트하는 방법
- Activity, Fragment 통합 테스트
통합 테스트는 여러 구성 요소(Activity, ViewModel, Repository 등)가 서로 상호작용하는 방식과 기능을 검증하는 테스트입니다. 안드로이드에서 통합 테스트를 할 때 Android Instrumentation과 Espresso를 활용하여 Activity와 ViewModel의 상호작용을 테스트하는 것이 중요한 부분입니다. 여기서 통합 테스트는 UI와 관련된 부분을 포함하거나 포함하지 않을 수 있지만, 핵심은 애플리케이션 컴포넌트 간의 상호작용을 테스트하는 것입니다.
1. Android Instrumentation 개념 이해
Instrumentation Test는 실제 기기나 에뮬레이터에서 실행되는 통합 테스트로, 앱의 다양한 컴포넌트가 어떻게 상호작용하는지 검증할 수 있습니다. 이 테스트는 앱을 실제 기기에서 작동시키며, 앱의 흐름을 자동으로 확인합니다.
핵심 포인트:
- Instrumentation Runner는 테스트를 실행하기 위한 핵심 구성 요소입니다.
- AndroidJUnitRunner는 JUnit을 기반으로 테스트를 실행하는 안드로이드의 표준 러너입니다.
- ActivityScenario는 통합 테스트에서 Activity를 실행하고 테스트할 수 있는 클래스입니다.
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
@Test
fun testActivityLaunch() {
val scenario = ActivityScenario.launch(MainActivity::class.java)
scenario.onActivity { activity ->
assertNotNull(activity)
}
}
}
2. Espresso를 활용한 UI 테스트 기본
Espresso는 안드로이드에서 UI 상호작용을 테스트하기 위한 프레임워크입니다. Espresso를 통해 통합 테스트에서도 UI를 자동화된 방식으로 확인할 수 있습니다.
핵심 포인트:
- ViewMatchers로 UI 요소를 찾습니다. (withId, withText 등)
- ViewActions로 버튼 클릭, 텍스트 입력 등의 액션을 수행합니다. (click(), typeText() 등)
- ViewAssertions로 결과를 검증합니다. (matches(isDisplayed()) 등)
@Test
fun testButtonClick() {
onView(withId(R.id.my_button)).perform(click())
onView(withId(R.id.result_text)).check(matches(withText("Hello World")))
}
3. View와 ViewModel을 함께 테스트하는 방법
통합 테스트에서는 ViewModel과 View(Activity, Fragment) 간의 상호작용을 테스트하는 것이 중요합니다. 이를 통해 UI 요소가 ViewModel과 정상적으로 연동되는지 확인할 수 있습니다.
핵심 포인트:
- ViewModel의 상태가 변경될 때 UI가 적절히 업데이트되는지 확인합니다.
- LiveData를 활용하여 ViewModel의 상태 변화를 테스트할 수 있습니다.
@Test
fun testViewModelAndViewInteraction() {
val viewModel = MyViewModel()
val scenario = ActivityScenario.launch(MyActivity::class.java)
scenario.onActivity { activity ->
// ViewModel 상태 변경
viewModel.setValue("New Value")
// UI에 반영되었는지 확인
onView(withId(R.id.text_view)).check(matches(withText("New Value")))
}
}
4. Activity, Fragment 통합 테스트
Activity와 Fragment 간의 상호작용을 통합적으로 테스트합니다. 여기서는 Fragment가 Activity 내에서 어떻게 작동하는지, 그리고 두 컴포넌트 간의 데이터 전달 및 UI 업데이트가 올바르게 이뤄지는지 확인할 수 있습니다.
핵심 포인트:
- FragmentScenario를 사용하여 Fragment를 테스트할 수 있습니다.
- Activity와 Fragment 간의 Intent 전달 및 데이터 흐름을 테스트합니다.
@Test
fun testActivityFragmentInteraction() {
val scenario = ActivityScenario.launch(MainActivity::class.java)
scenario.onActivity { activity ->
// Fragment가 정상적으로 붙었는지 확인
val fragment = activity.supportFragmentManager.findFragmentById(R.id.fragment_container)
assertNotNull(fragment)
// Fragment 내부의 UI가 업데이트되었는지 확인
onView(withId(R.id.fragment_text_view)).check(matches(withText("Fragment Loaded")))
}
}
'안드로이드 > 테스트' 카테고리의 다른 글
안드로이드 TDD, 안정된 개발 환경 구축 (0) | 2024.11.04 |
---|---|
[안드로이드 / Test] 2. JUnit을 이용한 단위 테스트 (0) | 2024.10.24 |
[안드로이드 / Test] 1. 테스트 개념 이해 및 중요성 (0) | 2024.10.24 |
안드로이드 앱 개발 시 테스트에 대해 학습할 수 있는 커리큘럼 (1) | 2024.10.24 |