Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
[RxJava2]Test시 Blocking Subscriber 방법 본문
일반적으로 Observable 을 테스트시 Blocking을 사용한다.
먼저 일반 코드를 작성하면 다음과 같을겁니다.
AtomicInteger hitcount = new AtomicInteger();
Observable<Long> source = io.reactivex.Observable.interval( 1 , TimeUnit.SECONDS).take(5);
source.subscribe( i -> hitcount.incrementAndGet());
assertTrue( hitcount.get() == 5);
여기에서 5개를 가져오는 일반적인 코드이다. 결과는 실패이다.
이유는 interval 함수를 보면 thread가 computation 이다. 그래서 가져올수 없다.
@CheckReturnValue
@SchedulerSupport(SchedulerSupport.COMPUTATION)
public static Observable<Long> interval(long period, TimeUnit unit) {
return interval(period, period, unit, Schedulers.computation());
}
그럴때 방법이 2가지가 있지만 우선 Blocking해서 값을 가져와서 테스트 해보는 방법을 해보자.
AtomicInteger hitcount = new AtomicInteger();
Observable<Long> source = io.reactivex.Observable.interval( 1 , TimeUnit.SECONDS).take(5);
source.blockingSubscribe( i -> hitcount.incrementAndGet());
assertTrue( hitcount.get() == 5);
결과는 성공
위 코드에서 subscribe -> blockingSubscribe
을 함으로써 값을 제대로 가져올수 있다.
쓰레드 상관없이 값을 가져오고 싶을땐 BlockingSubscribe
을 써서 테스트가 가능하다.
주의사항으로
절대 테스트말고 다른 곳에선 blocking을 사용하지 말자. 해보면 이유를 바로 알수있다.
'스터디 > RxJava2' 카테고리의 다른 글
[RxJava2]TestObserver , TestSubscriber 에 대해서 알아보자 (0) | 2017.10.22 |
---|---|
[Rxjava2]Blocking Functions (0) | 2017.10.22 |
[RxJava2]연산자를 오버로딩해서 구현해보자. (0) | 2017.10.22 |
[RxJava] Transform에서 공유 부분 피하기 (0) | 2017.10.22 |
[RxJava2] Compose with Parameters (0) | 2017.10.22 |