-
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에서 테스트가 정상으로 돌아간다.