2016-08-12 7 views
4

zu verspotten Ich habe eine API, die Observable 's mit RxJava verwendet. Zum Testen möchte ich Netzwerkoperationen vermeiden, also plane die Antworten. Da aber alle Antworten mit Observable umwickelt werden müssen und die from() Methode eine Future nicht einen konkreten Typ erwartet, ist meine Scheinklasse mit anonymen Wrapper-Klassen verschachtelt und ich denke, dass es einen besseren Weg geben muss.Was ist der richtige Weg, um eine RxJava Observable

Hier ist, was ich habe:

public class MockApi implements MyApi { 

    @Override 
    public Observable<MyData> getMyData() { 
     return Observable.from(new Future<MyData>() { 

      @Override public boolean cancel(boolean mayInterruptIfRunning) { return false; } 
      @Override public boolean isCancelled() { return false; } 
      @Override public boolean isDone() { return false; } 

      @Override 
      public MyData get(long timeout, TimeUnit unit) throws InterruptedException, 
        ExecutionException, TimeoutException { 
       return get(); 
      } 

      @Override 
      public MyData get() throws InterruptedException, ExecutionException { 
       return new MyData(); 
      } 

     }); 
    } 

    ... 

} 

Gibt es einen besseren Weg?

+0

'return Observable.just (new MyData())'? – akarnokd

Antwort

8
return Observable.just(new MyData()); 

Sie finden die Dokumentation here. Und für kompliziertere Schein =>list of creating operators.

+0

sollten Sie stattdessen Observable.defer (() -> Observable.just()) verwenden –

+0

Ich glaube nicht, der zurückgegebene Wert wird nur einmal verwendet. –

+0

Zum Beispiel kann Retrofit Observable zurückgeben und Sie abonnieren es nicht zweimal. –

1

Sie können Observable.defer(() -> Observable.just(new MyData()) verwenden oder PublishSubject zum Senden von Daten verwenden. Beachten Sie, dass Sie den Operator .defer() im ersten Fall verwenden müssen, da er den gleichen Wert vom ersten Aufruf verwendet, andernfalls

+0

Was ist das "es" im Satz "es wird den gleichen Wert verwenden"? –

+0

Operator 'nur'. –

+0

Es ist eine Mock-API, sollte also jedes Mal das gleiche Ergebnis aus dem Anruf zurückgeben, also glaube ich nicht, dass ich den Aufschub brauche? –

Verwandte Themen