2017-03-17 75 views
3

我想知道如何通過rxjava2測試Retrofit2調用。我的改裝API接口的樣子:如何測試Retrofit2 + RxJava2 api調用?

public interface LoginApiMapping { 
    @POST("v1/secm/oam/oauth2/token") 
    Observable<Response<RestResponseHolder<LoginResponseModel>>> login(@Body LoginModel model); 
} 

,我想編寫測試,這將通過RxJava2發送該請求,並檢查響應。我認爲有與RxJava的問題,因爲它是異步的,在測試完成之前,我得到的迴應,所以我試圖如下使用TestSubscriber,但是這是不可能的認購TestSubscriber <響應< RestResponseHolder < LoginResponseModel > > >我預計

@Test 
public void loginTest(){ 
    Context appContext = InstrumentationRegistry.getTargetContext(); 
    Api t = TestApi.create(appContext); 
    LoginModel loginModel = new LoginModel("username","password"); 
    TestSubscriber<Response<RestResponseHolder<LoginResponseModel>>> testSubscriber = new TestSubscriber<>(); 
    t.get(LoginApiMapping.class).login(loginModel).subscribe(testSubscriber); 
} 

誰解決了這個問題?感謝

回答

1

我終於找到了解決方案,所以我決定在這裏發佈。 首先你必須調用可觀測toFlowable(),並設置背壓策略,然後你可以用TestSubscriber訂閱如下

t.get(LoginApiMapping.class).login(loginModel).toFlowable(BackpressureStrategy.DROP).subscribe(testSubscriber); 

然後在那您可以檢查各種末尾添加

testSubscriber.awaitTerminalEvent(); 

R.Zagórski在上面的回答中指出,在測試訂閱者上的斷言。

1

在測試添加結束:

testSubscriber.awaitTerminalEvent(); 

然後你就可以在testSubscriber檢查有不同的主張。

+0

非常感謝您的回覆,我認爲它會很有用,但首先我需要能夠訂閱TestSubscriber >>什麼是不可能的。也許它可能有一些通用性的問題?在這個例子中,它似乎與對象RubberChicken一起工作http://fedepaol.github.io/blog/2015/09/13/testing-rxjava-observables-subscriptions/。也許它的RxJava2?當我嘗試訂閱我的對象時,我甚至無法編譯它。 – Houskov

0

您將TestSubscriber與Flowable和TestObserver一起使用並使用Observable。您可以通過將它們轉換爲Flowable或Observable來測試Single,Completable和Maybe,但是這三個函數的內置測試()會返回TestSubscriber。