Debugging 하는 방법
RxJava 사용시 디버깅 라이버러리는
frodo
를 사용하면 좋긴 한데 ( RxJava 1지원..ㅠ)
https://github.com/android10/frodo.git
일반적인 테스트 방법을 소개한다.
.
doOnNext()
를 활용하면 된다.
예를 들어 다음과 같은 내용이 있다고 가정하자.
주어진 3개의 내용에 알파벳을 뽑아내는 경우이다.
TestObserver<String> testObserver = new TestObserver<>();
Observable<String> items =
Observable.just("521934/2342/Foxtrot",
"Bravo/12112/78886/Tango",
"283242/4542/Whiskey/2348562");
items.concatMap( s -> Observable.fromArray( s.split("/")))
.filter(s -> s.matches("[A-Z]+"))
.subscribe(testObserver);
System.out.println(testObserver.values());
testObserver.assertValues( "Foxtrot","Bravo","Tango","Whiskey" );
결과는 실패이고 내용은 다음과 같다.
Value count differs; Expected: 4 [Foxtrot, Bravo, Tango, Whiskey], Actual: 0 [] (latch = 0, values = 0, errors = 0, completions = 1)
예상 결과는 4개이지만 실제 0개이다.
그럼 디버깅을 시작해보자
우선 concatMap
으로 제대로 보내는 지 확인해보자
.doOnNext( s-> System.out.println("Source pushed : " + s) )
.concatMap( s -> Observable.fromArray( s.split("/")))
doOnNext를 입력시
Source pushed : 521934/2342/Foxtrot
Source pushed : Bravo/12112/78886/Tango
Source pushed : 283242/4542/Whiskey/2348562
값이 제대로 전달되는 것으로 보인다..
그럼 다음껄 확인해보자
.concatMap( s -> Observable.fromArray( s.split("/")))
.doOnNext( s-> System.out.println("Source pushed : " + s) )
Result ================================================================
Source pushed : 521934
Source pushed : 2342
Source pushed : Foxtrot
Source pushed : Bravo
Source pushed : 12112
Source pushed : 78886
Source pushed : Tango
Source pushed : 283242
Source pushed : 4542
Source pushed : Whiskey
Source pushed : 2348562
정상적으로 나오는것 같다..그럼 다음껄..
.filter(s -> s.matches("[A-Z]+"))
.doOnNext( s-> System.out.println("Source pushed : " + s) )
Result ================================================================
값이 비어있다...여기가 문제인가보다. 그럼 수정 후 다시 해보자
.filter(s -> s.matches("[A-Za-z]+"))
.doOnNext( s-> System.out.println("Source pushed : " + s) )
Result ================================================================
Source pushed : Foxtrot
Source pushed : Bravo
Source pushed : Tango
Source pushed : Whiskey
이제 작동이 잘 된다..
최종 소스는 다음과 같다.
TestObserver<String> testObserver = new TestObserver<>();
Observable<String> items =
Observable.just("521934/2342/Foxtrot",
"Bravo/12112/78886/Tango",
"283242/4542/Whiskey/2348562");
items
.concatMap( s -> Observable.fromArray( s.split("/")))
.filter(s -> s.matches("[A-Za-z]+"))
.subscribe(testObserver);
testObserver.assertValues( "Foxtrot","Bravo","Tango","Whiskey" );
doOnNext
말고도 doOnError()
, doOnComplete()
, doOnSubscribe()
등이 있으니 활용하면 빠른 디버깅이 가능하다.
이상으로 디버깅을 마친다.
'스터디 > RxJava2' 카테고리의 다른 글
[RxJava2]동시성과 병렬화 테스트 (0) | 2017.10.22 |
---|---|
[RxJava2]SubscriberWith는 무엇일까? (2) | 2017.10.22 |
[RxJava2]TestSubscriber 을 이용해서 시간을 조절 해보자 (0) | 2017.10.22 |
[RxJava2]TestObserver , TestSubscriber 에 대해서 알아보자 (0) | 2017.10.22 |
[Rxjava2]Blocking Functions (0) | 2017.10.22 |