Published 2022. 7. 17. 23:58

RxJava로 비동기 처리

그동안 기술 공부 방법은 충분히 문서로 공부한 후에 실습을 하는 방향으로 갔었는데 실습의 타이밍이 늦어지는 걸 빈번히 경험했다. 그래서 이번에는 대략적인 개념 공부를 하고 바로 적용해보는 방식을 프로젝트에 적용해보고 있다. 단시간에 RxJava를 공부해서 프로젝트에 적용하고자 하니 이게 맞나 마음이 조급해지는 면이 있지만 틀리면 수정하면 된다는 마음으로 접근하고자 노력중이다. 우선 5가지 Observable에 대해 매우 간략히 정리 해보았다.

 

Observable - 가장 기본이 되는 Observable

Flowable - Observable + Backpressure(발행 속도와 구독 속도의 조절)

Single - 데이터를 한 번 발행하고 종료

Completable - 별도로 발생시키는 데이터 없이 작업의 성공, 실패 여부만 전파

Maybe - 데이터가 배출될 수도 있고 배출되지 않을 수도 있는 경우 사용

 

내 프로젝트에서는

Room에서 데이터를 Select하는 작업에서는 Flowable

SharedPreferance에서 데이터를 가져올 때는 Single

Room이나 SharedPreferences 에 데이터를 추가&업데이트&삭제 할 때는 Completable을 사용하였다

 

이에 대해 시간 날 때 포스팅하도록 하자

 

SharedPreferences  Unit Test

오늘 정말 많이 애를 먹인 부분이었다. 일반적으로 쉐어드 단위 테스트는 아래와 같은 방식으로 진행되면 된다.

    @Before
    fun before() {
        sharedPrefs = Mockito.mock<SharedPreferences>(SharedPreferences::class.java)
        val context: Context = Mockito.mock<Context>(Context::class.java)
        Mockito.`when`<SharedPreferences>(context.getSharedPreferences("test", 0))
            .thenReturn(sharedPrefs)
    }

하지만 내 프로젝트는 아래와 같은 위임패턴을 사용하고 나니 private한 sharedPreferences를 어떻게 처리해야 할 지에 대한 난관이 발생하였다.

class PrefDatabaseImpl(context: Context) : PrefDatabase {
	private val sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
}

private 요소에 접근할 수 있는 PowerMock 등등을 알아보다가 preferences mock 라이브러리를 발견하고 적용해보았는데 테스트가 잘 진행되는 것을 확인할 수 있었다.(https://proandroiddev.com/improve-android-unit-tests-with-shared-preferences-mock-library-959173a70fb4)

 

'TIL' 카테고리의 다른 글

22/08/06 TIL  (0) 2022.08.06
2022/07/27 TIL  (0) 2022.07.27
2022/07/15 TIL  (0) 2022.07.15
2022/07/14 TIL  (0) 2022.07.15
복사했습니다!