2017-08-01 7 views
0

だから、で私はachiveしたいものについて少しコンテキストを開始します。ユニットテストのためにFlowableでデータを送信しない方法は?

私はFlowable<List<Route>>を返しgetBusRoutesByQuery(query: String)という名前DataManagerクラスの機能を持っています。この機能は、指定されたクエリによるバス経路のローカルストレージとリモートストレージを検索します。 zipを使用して、2つのFlowableを結合し、それらを重複なしで1つにマージします。しかし、例えばユーザーが初めてアプリケーションを使用するときには、ローカルソースにデータがないので、zipは機能しません。だから私は関数onErrorReturnを見つけたと私はそれが戻ってくるデータがないときにそれを使用しています。 onErrorReturnは、エラーではなく空のリストを返します。したがって、リモートソースは空のデータを持つzipになります。そして今、私がテストでFlowble.empty()を使用して、ローカルストレージにデータがない状況を想定すると、テストは合格しません。

テスト仮定

  1. DataManager
  2. データが今どのよう

をretrivenれるからリモートストレージに利用可能なローカルストレージにデータ

  • データ
  • getBusRoutesByQuery(query: String)が呼び出されていませんそれはコードを見て:
    override fun getBusRoutesByQuery(query: String): Flowable<List<Route>> { 
        val networkSourceWithSave: Flowable<List<Route>> = remoteBusDataManager 
          .getBusRoutesByQuery(query) 
          .doOnNext { localBusDataManager.insertBusRoutes(it) } 
          .onErrorReturn { listOf() } 
        val localSource: Flowable<List<Route>> = localBusDataManager 
          .getBusRoutesByQuery(query) 
          .onErrorReturn { listOf() } 
    
        return Flowable.zip(localSource, 
             networkSourceWithSave, 
             BiFunction { local, remote -> mergeTwoListsWithoutDuplicates(local, remote) }) 
    } 
    
    とテスト:

    @Test 
    fun getRoutesByQueryWhenLocalSourceIsNotAvailable() { 
        `when`(localBusDataManager.getBusRoutesByQuery(QUERY)).thenReturn(Flowable.empty()) 
        `when`(remoteBusDataManager.getBusRoutesByQuery(QUERY)).thenReturn(Flowable.just(ROUTES)) 
    
        busDataManager.getBusRoutesByQuery(QUERY).subscribe(testSubscriber) 
    
        testSubscriber.assertValue(ROUTES) 
    } 
    

    だから私に教えて、私はローカルストレージデータが利用できないzip、そしてどのように私はそれをテストすることができて何ができますか。ありがとう;)

  • 答えて

    1

    あなたの実装は間違っています。 Zipは各ストリームで1:1を組み合わせます。ドキュメント:http://reactivex.io/documentation/operators/zip.htmlを参照してください。あなたのストリームの1つが空であるので、ジップするものは何もなく、何も下流にプッシュされません。代わりに、私は、マージと明確なことをお勧めしたいビュンの

    localSource.mergeWith(networkSourceWithSave).distinct()

    +0

    おかげで、今では働いているが;) – Panczur

    関連する問題