2016-10-12 8 views
1

現在、RxJavaを使用してAndroidアプリケーションを開発中です。ユニットテストにおけるRxJavaの模擬活動ライフサイクル

public Observable<Response<DTO>> getDTO(final BaseActivity activity, final long workorderId) { 
    return dtoService.getDTO(DTOId) 
      .subscribeOn(Schedulers.io()) 
      .compose(activity.bindUntilEvent(ActivityEvent.PAUSE)) 
      .observeOn(AndroidSchedulers.mainThread()); 
} 

(。ちょうどそれを行うために必要なものを反映するために、いくつかのランダムな名前を入れて、オブジェクトの命名を気にしないでください)

I:

は、私は次のコードを得ましたユニットテストを実行して、関連するコードをテストしてください。しかし、これらの部分には .compose()メソッドが含まれていません。 は、今私は次のことを試してみました: lifecycle == null(私はそれをデバッグする場合、それはです):

@Mock 
private BaseActivity baseActivity; 

@Before 
public void setup() { 
    MockitoAnnotations.initMocks(this); 
} 

private BaseActivity baseActivity; 

@Before 
public void setup() { 
    baseActivity = Mock(BaseActivity.class); 
} 

これらの状況の両方が私にNULLポインタを与えます。

これを他の方法で模擬したりテストしたりするにはどうすればよいですか? (また、私は完全にコン()メソッドを理解していない。しかし、私は、このコードに関連するすべてのリソースを見つけるように見えるカント)

(それは問題ではありませんので、私は、AndroidとRxJavaスケジューラを提供しました)

ありがとう!

+0

あなたはユニットテスト活動している場合、私はまたrobolectricを示唆している実際の活動にスパイを考慮したユニットテスト自体はないですか。 –

+0

私は、このサンプルプロジェクトでさまざまなタイプの単体テストを行っています。助けてくれることを願っています:http://github.com/mmirhoseini/fyber_mobile_offers –

+0

しかし私は私の活動をテストしたくありません。このメソッドが正しいDTOでレスポンスを持つobservableを返すのであれば、これは何の関係もないので、私はそのアクティビティを馬鹿にしたいのですが、おそらく私はcompose()メソッドを理解できませんか? – Clemenz

答えて

0

.composeメソッドから始めましょう。それは何ですか?あなたのObservableには、という具合に、 "mapflatMapなどのような"観測可能なメソッドのカスタムシーケンスを組み合わせることができるトランス機能が適用されます。。私。 .subscribeOn.observeOnの方法(more here)を組み合わせることができます。 RxLifecycleを使用しているので、ソースコードに移動して、what it doesを参照してください。

アクティビティのライフサイクルをテストで使用する場合は、Robolectricを使用する必要があります。アクティビティの作成とライフサイクルの管理を完全に制御できます。 NPEのお手伝いをします。あなただけのセットアップをして書き込み:

ActivityController controller = Robolectric.buildActivity(BaseActivity.class).create().start().resume(); 
Activity activity = controller.get(); 

// Not paused yet 
activityController.pause(); 
// Pause happened! Do something! 

は(それが役に立てば幸い:

+0

もっと多くを明確にしました。ありがとう!私のコードを正しく理解していれば(それは誰かによって書かれたものです)、アクティビティが一時停止されている場合、コールは終了しますか?さもなければそれはちょうど続けるだろ しかし、問題は、私は実際に私の活動で何かをしたくないということです。 RoboElectricなしでメソッドやアクティビティを模擬する方法はありますか?私はちょうど私が応答で観測可能なバックを得るかどうかを知りたい。 – Clemenz

+0

アクティビティが一時停止した場合は、それは 'onCompleted()'を送出し、コールは終了します(ドキュメントに従って)。 – aleien

+0

嘲笑について - あなたは 'Mockito.when(activity.getLifecycle())を使って試してみることができます。PAUSE) 'またはこれに似たもの(これは擬似コードであり、うまくいかない、私はちょうどアプローチを見せたい) – aleien

関連する問題