본문 바로가기
Rx

TestObserver ,TestScheduler 를 이용한 테스트작성하기

by 봄석 2019. 9. 10.

TestObserver ,TestSubscriberTestScheduler 를 이용한 테스트작성하기

RxJava2부터 좀 더 간결해진 테스트 바로  TestObserver , TestSubscriber 를 이용한 테스트 작성법에 대하여

알아보도록 하겠습니다.

 


 

TestObserver

TestObsever란 이벤트를 감지하고 연결된 테스트 체인에따라 성공여부를 알려주는

옵저버로 onSubscribe, onNext, onError, onSuccess등을 오버라이드하여 결과값을 테스트하는 용도로 사용할 수 있습니다.

 

 

 

TestObserver Assert Method

assertSubscribed() 성공적으로 onSubscribe가 호출되었는지 검증합니다.
assertNotSubscribed()
onSubscribe가 호출되지않았는지 검증합니다.
assertValues(T... values) values가 일치하는지 검증합니다.
assertValue(T) value가 일치하는지 검증합니다.
assertComplete() 정상적으로 onComplete가 호출되었는지 검증합니다.
assertValueSequence(Iterable) value의 순서가 맞는지 비교합니다.
assertValueAt(index:Int,value:T) values 의 인덱스 값을 검증합니다.
assertTerminated() terminated 되었는지 검증합니다.
assertNotTerminated() terminated 되지않았는지 검증합니다.
assertValueCount(count:Int) 몇개의 값이 나왔는지 검증합니다.
assertEmpty() 기대하는값이 empty인지 검증합니다.
assertNever(T) 기대하는 값 T가 안나왔다면 테스트를 성공합니다.
assertNoErrors() 에러없이 끝났는지 검증합니다.
assertErrorMessage(String message)  에러메시지가 같은지 검증합니다.
assertFailure() 기대했던 에러(onError 이벤트)가 발생하는지 확인합니다. 만약 기대했던 에러가 발생하지 않으면 테스트 코드 실행은 실패합니다.
assertFailureAndMessage() 기대했떤 에러 발생 시 에러 메시지를 검증합니다.
assertResult(T..values) assertSubscribed(), assertValues(values) ,assertNoErrors(), assertComplete()를 연속으로 호출합니다.
assertValuesOnly(T... values)

assertSubscribed() ,assertValues(values) ,assertNoErrors() ,assertNotComplete() 를 연속으로 호출합니다. complete() 가 안호출 되었음을 검증합니다.

 

assertValueSequenceOnly(

Iterable sequence)

assertSubscribed() , assertValueSequence(sequence) ,assertNoErrors() ,assertNotComplete()를 연속으로 호출합니다.  complete() 가 안호출 되었음을 검증합니다.

TestObserver Await Method

awaitTerminalEvent()   onComplete 혹은 onError가 호출될때까지 기다립니다.
await() onNext된 값이 모두 발행될때까지 기다립니다.
awawaitCount() 특정 개수가 발행될때까지 기다립니다.
awaitDone()
interval() 함수처럼 비동기로 동작하는 Observable 코드를 검증합니다.

 

 

ChainingTest Example

 

 

 

TestScheduler로 시간 skip하기

TestObserver(or TestSubscriber)을 이용시await를 통해서 기다릴수 있지만 그러기엔 시간이 많이 걸릴수 있습니다.

그래서 TestScheduler를 이용하면  시간을 미리 땡겨서 테스트가 가능하다.

예를 들어 interval(10) 으로 10초뒤에 값을 체크를 하는 경우 10초를 기다리지 않고 10초 뒤로 시간 설정 후 바로 테스트 하게끔 하는 것입니다.

 

now() 함수를 이용하여 현재 이동한 시간이 얼마인지 알 수 있습니다.

 

#1 current time = 70
#2 current time = 5400

댓글