Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 작성
- recyclerview
- 특가알람
- todofication
- onViewCreated
- 뷰 상태복구
- andorid
- android clean architecture
- 타이머앱
- 안드로이드
- 안드로이드 클린 아키텍쳐
- 특가촌
- 카드 내역 공유 앱
- compileKotlin FAILED
- 대학톡
- kotlin
- 뷰 상태 저장
- 특가게시판
- Android
- moveToState
- List
- RX
- nvidia-docker
- fragment
- Quickly
- java.lang.OutOfMemoryError: Java heap space
- Koin
- 올인원타이머
- RxJava
- 카드내역 공유
Archives
- Today
- Total
seoft
UnitTest에 LiveData사용시 에러 본문
[문제정의]
ViewModel내 LiveData를 set value하는 부분이있고 unit test 내에서 그 부분이 진행될 경우의 발생되는 에러
E/TestRunner: java.lang.IllegalStateException: Cannot invoke setValue on a background thread at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:461) at androidx.lifecycle.LiveData.setValue(LiveData.java:304) at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
in logcat error |
LiveData는 ObservableField와 달리 VM을 생성한 Activity의 생명주기를 따르게 되고
생명주기를 따르기 위해서 LiveData의 setValue가 내부적으로 mainThread를 사용하기 때문에
일반적인 mock사용시 mainThread가 아닌 환경에서 오류가 발생
@MainThread
in androidx.lifecycle.LiveData |
[문제해결]
1. InstantTaskExecutorRule 클래스 사용을 위한 depdencies 추가
androidTestImplementation 'androidx.arch.core:core-testing:2.1.0'
in build.gradle |
2. Unit Test코드 내 InstantTaskExecutorRule Rule지정
@JvmField
in unit test class |
[관련코드]
https://gist.github.com/seoft/d0f7f5d92cd3df285da0ceef2ab2b304t
'android' 카테고리의 다른 글
Android Room 종합예제(기본연동, ForeignKey, enum, list, Rx연동, unit test) (0) | 2019.11.30 |
---|---|
rxjava subscribeOn observeOn 요약 (0) | 2019.11.30 |
ShortCut 관련 기능 실행시 - Caller can't access shortcut information 에러 (0) | 2019.09.27 |
Cannot find a version of '...' that satisfies the version constraints: 오류 해결 (0) | 2019.09.22 |
rxjava 호출 후 1초간 재 호출이 안될경우 이벤트 실행 (1) | 2019.09.22 |
Comments