[Android:Codelab] Testing Basic-4
👇🏻 참고문서
Advanced Android in Kotlin 05.1: Testing Basics | Android Developers
Learn the basics of testing your Android Kotlin apps. In this codelab you’ll learn to run tests, write basic tests, work with AndroidX Test, as well as test ViewModel and LiveData.
developer.android.com
안드로이드 독학하기 시리즈! 테스트입니다.
테스트 코드랩을 복습하기 위한 포스트입니다. 🤗
지금까지 배운 ViewModel의 LiveData 테스트하는 방법들을 복습하는 시간으로 새로운 테스트 코드를 작성해보도록 하겠습니다.
8. ViewModel 테스트하기
이번 챕터에서는 TO DO 리스트 filter type을 ALL로 변경 시, 'Add task' 버튼이 보이는지 검사해보겠습니다.
- filtering mode를 ALL_TASKS로 설정한다.
- tasksAddViewVisible LiveData가 true인지 확인한다.
8.1 테스트 함수 만들기
- 함수 명은 정해진 convention에 따라 setFilterAllTasks_tasksAddViewVisible() 로 하겠습니다.
@Test
fun setFilterAllTasks_tasksAddViewVisible() {
// 1. Given: a fresh ViewModel
// 2. When: the filter type is ALL_TASKS
// 3. Then: the "Add task" action is visible
}
8.2 viewModel 만들기(Given)
- 이 때 AndroidX를 사용해 Context 객체를 받아옵니다.
// 1. Given: a fresh ViewModel
val tasksViewModel = TasksViewModel(ApplicationProvider.getApplicationContext())
8.3 filtering mode를 ALL_TASKS로 설정하기(When)
// 2. When: the filter type is ALL_TASKS
tasksViewModel.setFiltering(TasksFilterType.ALL_TASKS)
8.4 LiveData의 값이 원하는 값인지 검사하기(Then)
- 이 때, Testing Basic-3에서 구현해둔 getOrAwaitValue 메서드를 사용합니다.
// 3. Then: the "Add task" action is visible
assertThat(tasksViewModel.tasksAddViewVisible.getOrAwaitValue(), `is`(true))
8.5 테스트가 정상적으로 완료되는지 확인하기
9. @Before rule
Testing Basic-3의 7에서 작성한 테스트 코드와 이번 포스트의 8에서 작성한 테스트 코드를 보면 중복적으로 viewModel을 생성하는 코드가 들어간 것을 알 수 있습니다.
이러한 반복적인 setup 코드를 줄이기 위해 @Before 어노테이션을 사용할 수 있습니다.
지금까지 작성해왔던 테스트 코드들의 viewModel 생성 부분을 예로 들어보도록 하겠습니다.
private lateinit var tasksViewModel: TasksViewModel
@Before
fun setupViewModel() {
// 1. Given: a fresh TasksViewModel
tasksViewModel = TasksViewModel(
ApplicationProvider.getApplicationContext()
)
}
- lateinit으로 TaskViewModel 타입의 변수를 선언해줍니다.
- 해당 변수를 초기화할 setupViewModel 메서드를 만들어줍니다.
- 해당 메서드에 @Before 어노테이션을 추가해줍니다.
다시 한번 더 테스트 코드를 실행해보면 모두 성공적으로 완료되는 것을 볼 수 있습니다.
이번 포스트까지 테스트의 가장 기본적인 Codelab인 5.1 Testing Basics를 공부해보았습니다.
가장 기초적인 Codelab이기 Data Layer와는 연동되지 않은 ViewModel에 한정된 기능들을 테스트해보았습니다.
이어지는 Codelab인 5.2 Dependency Injection and Test Doubles 에서 더 자세한 테스트 방법에 대해서
학습할 수 있을 듯 합니다.🔥
감사합니다. 😌