2016-06-28 7 views
1

개조 호출 테스트 사례를 작성하는 중에 문제가 발생합니다.retrofit을 동기식으로 관찰하는 방법

테스트 케이스가 통과 할 수 있도록 retrofit을 동기식으로 관찰 가능하게 만들고 싶습니다. 현재 retrofit 콜백이 오기 전에 테스트 케이스 실행이 완료되고 테스트 케이스가 실패합니다.

mainThreadSched set to **Schedulers.immediate()** and 
ioSched set to **Schedulers.immediate()** 
:

mainThreadSched set to **AndroidSchedulers.mainThread()** and 
ioSche set to **Schedulers.io()** 

테스트 코드의 경우 : I는 다음과 같이 실제 테스트 코드에 대한 전혀 다른 스케줄러를 주입 단검을 사용하고

**TestClient.getWeatherData(cityName) 
    .observeOn(mainThreadSched) 
    .subscribeOn(ioSched) 
    .subscribe(this::onLoadSuccess, this::onLoadError);** 

: 여기

는 개조 호출입니다

Schedulers.immediate()에 스케줄러를 설정해도 테스트 케이스가 실패하는 경우가 있습니다. 내가 여기서 뭔가 잘못하고있는거야? 아니면이 테스트를 수행 할 수있는 다른 방법이 있습니까?

+0

'Schedulers.trampoline()'을 사용해 보셨습니까? 'immediate '는 적당한 스케쥴러가 아니기 때문에 (미숙하고 재귀/재진입 사용을 지원하지 않기 때문에) 신비한 중단이 발생하기 쉽다. – akarnokd

+0

이 질문을보십시오 : http://stackoverflow.com/questions/36873806/unttest-mock-rxjava-object-in-usecase-object 'toBlocking'을 사용하거나'TestSubscriber.awaitTerminalEvent()'를 사용할 수 있습니다. . – marwinXXII

+0

코드에서'subscribeOn (ioSched)'을 제거하십시오. 그래서 모든 것이 메인 쓰레드 자체로부터 호출 될 것입니다. –

답변

0

Observable에 Block(). first()를 추가 할 수 있습니다.

관련 문제