Android 공부/단위테스트 관련

AndroidX 테스트용 ViewModel, Live Data 테스트

Machine_웅 2022. 5. 10. 16:41
728x90
반응형

ViewModel LiveData. 에대한 테스트를 작성하는 방법 

https://developer.android.com/codelabs/advanced-android-kotlin-training-testing-basics#7

 

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

설정하기

AndroidX 테스트란 무엇입니까?

AndroidX Test는 테스트용 라이브러리 모음입니다. 

여기에는 테스트를 위한 애플리케이션 및 활동과 같은 구성 요소 버전을 제공하는 클래스와 메서드가 포함됩니다. 

 

AndroidX 테스트 API의 이점 중 하나는 로컬 테스트 와 계측 테스트 모두에서 작동하도록 빌드되었다는 것입니다 . 이것은 다음과 같은 이유로 좋습니다.

  • 로컬 테스트 또는 계측 테스트와 동일한 테스트를 실행할 수 있습니다.
  • 로컬 및 계측 테스트에 대해 다른 테스트 API를 배울 필요가 없습니다.

TasksViewModelTest예를 들어 AndroidX 테스트 라이브러리를 사용하여 코드를 작성했으므로 클래스를 test폴더에서 폴더로 이동할 수 androidTest있으며 테스트는 계속 실행됩니다. getApplicationContext()로컬 또는 계측 테스트로 실행되는지 여부에 따라 약간 다르게 작동합니다 .

  • 계측 테스트인 경우 에뮬레이터를 부팅하거나 실제 장치에 연결할 때 실제 응용 프로그램 컨텍스트가 제공됩니다.
  • 로컬 테스트인 경우 시뮬레이션된 Android 환경을 사용합니다.

 

 

 

로볼렉트릭이란?

AndroidX Test가 로컬 테스트에 사용하는 시뮬레이션된 Android 환경은 Robolectric에서 제공 합니다 .

 Robolectric 은 테스트를 위해 시뮬레이션된 Android 환경을 생성하고

에뮬레이터를 부팅하거나 기기에서 실행하는 것보다 빠르게 실행되는 라이브러리입니다.

Robolectric 종속성이 없으면 다음 오류가 발생합니다.

 

 

AndroidX 테스트 라이브러리 에는 테스트를 위한 애플리케이션 및 활동과 같은 구성 요소 버전을 제공하는 클래스와 메서드가 포함되어 있습니다. 시뮬레이트된 Android 프레임워크 클래스 (예: 애플리케이션 컨텍스트) 가 필요한 로컬 테스트 가 있는 경우 다음 단계에 따라 AndroidX 테스트를 올바르게 설정합니다.

  1. AndroidX 테스트 코어 및 확장 종속성 추가
  2. Robolectric Testing 라이브러리 종속성 추가
  3. AndroidJunit4 테스트 러너로 클래스에 주석 달기
  4. AndroidX 테스트 코드 작성

이 단계를 완료 한 다음 함께 수행하는 작업을 이해하게 됩니다.

참고: 보기 모델 에 애플리케이션 컨텍스트가 필요 하지 않은 경우 추가 라이브러리 없이 보기 모델을 구성할 수 있습니다.

 

 

Gradle 종속성 추가

  1. 이러한 종속성을 앱 모듈의 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 테스트 러너 추가

  1. @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 테스트를 위해

  1. InstantTaskExecutorRule
    • Junit Rule
    • 모든 AAC 관련 background-job들을 한 Thread에서 실행하게 하고 결과는 동기적으로 나온다.
  2. 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"
}

 

728x90
반응형

'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