2017-03-17 3 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でこのリクエストを送信し、応答をチェックするテストを書きたいと思います。私はそれが非同期であり、私は応答を取得する前にテストが終了するので、私は以下のようにTestSubscriberを使用しようとしたとしてRxJavaに問題があることを考えるが、私として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()を呼び出し、バックプレッシャー戦略を設定し、あなたが

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

以下のようTestSubscriberで購読することができますする必要がまずあなたが様々なチェックでき終わり

testSubscriber.awaitTerminalEvent(); 

を追加しますR.Zagórskiが上記の答えで指摘したように、testSubscriberのアサーション

1

testSubscriber.awaitTerminalEvent(); 

その後、testSubscriber上のさまざまなアサーションを確認することができます。

+0

ありがとう、私はそれが役に立つと思いますが、まずTestSubscriber >>を購読できる必要があります。多分それは一般性にいくつかの問題があるかもしれませんか?この例では、RubberChickenオブジェクトでhttp://fedepaol.github.io/blog/2015/09/13/testing-rxjava-observables-subscriptions/のように動作しているようです。多分RxJava2のために?私は私のオブジェクトを購読しようとすると、それをコンパイルすることさえできません。 – Houskov

0

FlowableでTestSubscriberを使用し、ObservableでTestObserverを使用します。 Single、Completable、MaybeのいずれかをFlowableまたはObservableに変換することでテストできますが、これら3つの組み込みtest()はTestSubscriberを返します。

関連する問題