ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android Local Unit Test에서 ViewMod 짱이네
    카테고리 없음 2020. 2. 4. 18:28

    먼저 ViewModel안에는 (Mutable) LiveData의 값을 변경해준다


    와 같은 코드가 있어야 했던 postValue메서드와 달리 value를 직접 바꿔주는 메서드는 바로 실행이 되고 UI스레드에서만 실행시킬 필요가 있습니다.그러나 View Model을 Test 하는 코드를 짜면 위와 같은 코드에서 향후와 같은 오류가 나온다.​


    이 오류는 메인 스레드에서 Live Data 값을 변경해야 하는데 Local Unit Test 테스트 코드(JVM)에서는 UI 스레드가 무엇인지도 모르기 때문에 생성합니다.​


    >


    일단, 이러한 에러가 나쁘지 않다면, builld.gradle로 다음과 같은 해결책을 시도할 수도 있다.​


    그러면 지금 이런 오류가 발생하게 됩니다.


    마찬가지로 함수에서 기본값을 반환해도 메인 스레드 자체가 무엇인지 모르기 때문에 발생하는 오류입니다.기막힌 술취가 아닐 수 없다.이럴 때 해법은 간단하다.​


    상기와 같은 의존성을 추가하여


    위와 같이 Instant Task Executor Rule()이라는 것을 테스트 클래스에 가지고 있어주면 된다.이는 AAC 관련 작업 중 메인 스레드에서 실행되는 작업이 백그라운드 스레드에서 실행되도록 바꾸는 Rule이다.공식적인 문서의 설명은 이후이다.​



    Rx Java의 경우도 마찬가지 정세가 일어난다.AndroidSchedulers.mainScheduler()를 사용하면 난리가 난다.다음과 같은 so의 답변을 참고합니다.​


    이후와 같은 커스텀TestRule 클래스를 정의합니다.​


    따라서 이후와 함께 적용합니다.​


    이것으로 Live Data와 Rx Java를 사용하는 View Model에서 테스트가 정상으로 돌아간다.


    댓글

Designed by Tistory.