Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
[RxJava2]TestSubscriber 을 이용해서 시간을 조절 해보자 본문
TestScheduler
TestObserver(or TestSubscriber)
을 이용시await
를 통해서 기다릴수 있지만 그러기엔 시간이 많이 걸릴수 있다.
그래서 타임머신기능으로 시간을 미리 땡겨서 테스트가 가능하다.
예를 들어 interval(10) 으로 10초뒤에 값을 체크를 하는 경우 10초를 기다리지 않고 10초 뒤로 시간 설정 후 바로 테스트 하게끔 하는 것이다.
이 부분에 대해서 좀 더 공부가 필요해보인다.
TestScheduler testScheduler = new TestScheduler();
TestObserver<Long> testObserver = new TestObserver<>();
Observable<Long> minTicker = Observable.interval(1, TimeUnit.MINUTES , testScheduler);
minTicker.subscribe(testObserver);
//30초 뒤로 이동
testScheduler.advanceTimeBy(30 , TimeUnit.SECONDS);
//앞으로 이동했기 때문에 아직 배출이 안됨
testObserver.assertValueCount(0);
//구독 후 뒤로 70초 이동..
testScheduler.advanceTimeTo(70 , TimeUnit.SECONDS);
//1분 이동했으니 1개가 나온다.
testObserver.assertValueCount(1);
System.out.println("#1 current time = " + testScheduler.now(TimeUnit.SECONDS));
//구독후 90분 뒤로 감
testScheduler.advanceTimeTo(90, TimeUnit.MINUTES);
System.out.println("#2 current time = " + testScheduler.now(TimeUnit.SECONDS));
//결과값 : 90개가 나온다.
testObserver.assertValueCount(90);
now() 는 얼마나 시간을 앞당겼는지 체크를 할수 있다.
triggerAction()
이 무엇인지도 한번 찾아보자.
TriggerAction()
공식 설명은 이 스케줄러의 현재 시간 또는 그 이전에 아직 트리거되지 않았거나 트리거되도록 예정된 모든 작업을 트리거합니다.
Triggers any actions that have not yet been triggered and that are scheduled to be triggered at or before this Scheduler's present time
TestScheduler s = new TestScheduler();
s.createWorker().schedule(
() -> System.out.println("Immediate"));
s.createWorker().schedule(
() -> System.out.println("20s"),
20, TimeUnit.SECONDS);
s.triggerActions();
System.out.println("Virtual time: " + s.now(TimeUnit.SECONDS));
결과값
Immediate
Virtual time: 0
'스터디 > RxJava2' 카테고리의 다른 글
[RxJava2]SubscriberWith는 무엇일까? (2) | 2017.10.22 |
---|---|
[RxJava2] 디버깅 하는 기본적인 방법 (1) | 2017.10.22 |
[RxJava2]TestObserver , TestSubscriber 에 대해서 알아보자 (0) | 2017.10.22 |
[Rxjava2]Blocking Functions (0) | 2017.10.22 |
[RxJava2]Test시 Blocking Subscriber 방법 (0) | 2017.10.22 |