ViewModel과 LiveData. 에대한 테스트를 작성하는 방법
https://developer.android.com/codelabs/advanced-android-kotlin-training-testing-basics#7
설정하기
AndroidX 테스트란 무엇입니까?
AndroidX Test는 테스트용 라이브러리 모음입니다.
여기에는 테스트를 위한 애플리케이션 및 활동과 같은 구성 요소 버전을 제공하는 클래스와 메서드가 포함됩니다.
AndroidX 테스트 API의 이점 중 하나는 로컬 테스트 와 계측 테스트 모두에서 작동하도록 빌드되었다는 것입니다 . 이것은 다음과 같은 이유로 좋습니다.
- 로컬 테스트 또는 계측 테스트와 동일한 테스트를 실행할 수 있습니다.
- 로컬 및 계측 테스트에 대해 다른 테스트 API를 배울 필요가 없습니다.
TasksViewModelTest예를 들어 AndroidX 테스트 라이브러리를 사용하여 코드를 작성했으므로 클래스를 test폴더에서 폴더로 이동할 수 androidTest있으며 테스트는 계속 실행됩니다. getApplicationContext()로컬 또는 계측 테스트로 실행되는지 여부에 따라 약간 다르게 작동합니다 .
- 계측 테스트인 경우 에뮬레이터를 부팅하거나 실제 장치에 연결할 때 실제 응용 프로그램 컨텍스트가 제공됩니다.
- 로컬 테스트인 경우 시뮬레이션된 Android 환경을 사용합니다.
로볼렉트릭이란?
AndroidX Test가 로컬 테스트에 사용하는 시뮬레이션된 Android 환경은 Robolectric에서 제공 합니다 .
Robolectric 은 테스트를 위해 시뮬레이션된 Android 환경을 생성하고
에뮬레이터를 부팅하거나 기기에서 실행하는 것보다 빠르게 실행되는 라이브러리입니다.
Robolectric 종속성이 없으면 다음 오류가 발생합니다.
AndroidX 테스트 라이브러리 에는 테스트를 위한 애플리케이션 및 활동과 같은 구성 요소 버전을 제공하는 클래스와 메서드가 포함되어 있습니다. 시뮬레이트된 Android 프레임워크 클래스 (예: 애플리케이션 컨텍스트) 가 필요한 로컬 테스트 가 있는 경우 다음 단계에 따라 AndroidX 테스트를 올바르게 설정합니다.
- AndroidX 테스트 코어 및 확장 종속성 추가
- Robolectric Testing 라이브러리 종속성 추가
- AndroidJunit4 테스트 러너로 클래스에 주석 달기
- AndroidX 테스트 코드 작성
이 단계를 완료 한 다음 함께 수행하는 작업을 이해하게 됩니다.
참고: 보기 모델 에 애플리케이션 컨텍스트가 필요 하지 않은 경우 추가 라이브러리 없이 보기 모델을 구성할 수 있습니다.
Gradle 종속성 추가
- 이러한 종속성을 앱 모듈의 build.gradle파일에 복사하여 핵심 AndroidX 테스트 코어 및 확장 종속성과 Robolectric 테스트 종속성을 추가합니다.
앱/빌드.gradle
// AndroidX Test - JVM testing
testImplementation "androidx.test.ext:junit-ktx:$androidXTestExtKotlinRunnerVersion"
testImplementation "androidx.test:core-ktx:$androidXTestCoreVersion"
testImplementation "org.robolectric:robolectric:$robolectricVersion"
JUnit 테스트 러너 추가
- @RunWith(AndroidJUnit4::class)테스트 클래스 위에 추가 하십시오.
AndroidX 테스트 사용
이 시점에서 AndroidX 테스트 라이브러리를 사용할 수 있습니다. ApplicationProvider.getApplicationContext여기에는 응용 프로그램 컨텍스트를 가져오는 메서드 가 포함됩니다.
* context 가져오기 위함
AndroidX 테스트 라이브러리에서 TasksViewModelusing 을 만듭니다 .
ApplicationProvider.getApplicationContext()
* 뷰 모델에는 어려 로직이 있을 것인데, 그중에서 DB 코드, API 호출에 의존 하지 않는 테스트를 작성 할 것입니다.
- 테스트 코드를 작성하여 LiveData를 관찰하고 있는 곳에서 이벤트가 발생하는지 확인
- viewModel 클래스를 가지고 테스트 클래스를 생성합니다.
AndroidX Test
- 안드로이드 테스트를 위한 라이브러리
- local or instrumented 모두 가능
- local에서 사용시 시뮬레이션 환경을 제공(Robolectric의 도움 받음)
- instrumented에서 사용시 실제 환경 값(context etc)들을 이용
- local에서 사용사 Robolectric library 필요
LiveData 테스트를 위해
- InstantTaskExecutorRule
- Junit Rule
- 모든 AAC 관련 background-job들을 한 Thread에서 실행하게 하고 결과는 동기적으로 나온다.
- liveData.observe()를 이용
testImplementation “androidx.arch.core:core-testing:$archTestingVersion”
이번 테스트는 local-test 다.
Setting
ViewModel test시 안드로이드 컴포넌트(Context 등)가 필요할 경우 아래의 의존성들을 추가해주자.
//build.gradle(.)
ext{
...
androidXTestCoreVersion = '1.2.0'
androidXTestExtKotlinRunnerVersion = '1.1.2'
robolectricVersion = '4.3.1'
} 최신버전에 맞게 설정한다.
//build.gradle(.app)
android{
// Always show the result of every unit test when running via command line, even if it passes.
testOptions.unitTests {
includeAndroidResources = true
//keep your unit tests running as you add idling resource code to your application code.
returnDefaultValues = true
}
}
dependencies {
...
// AndroidX Test - JVM testing
testImplementation "androidx.test.ext:junit-ktx:$androidXTestExtKotlinRunnerVersion"
testImplementation "androidx.test:core-ktx:$androidXTestCoreVersion"
testImplementation "org.robolectric:robolectric:$robolectricVersion"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.2"
}
'Android 공부 > 단위테스트 관련' 카테고리의 다른 글
JUnit4 함수. (0) | 2022.05.13 |
---|---|
TDD 참고 URL (0) | 2022.05.11 |
단위테스트? : ( Mock ) 02 , 테스트 적용과정. (0) | 2022.05.09 |
Mockito : 기능 들? (0) | 2022.05.09 |
Mocking 및 Unit test 작성 01 (0) | 2022.05.09 |