2016-04-19 3 views
0

Ich habe einen HystrixObservableCommand, Ich mag würde mit Mockito verspotten:Mocking HystrixObservableCommand Ergebnisse in Echt .toObservable() aufgerufen zu werden

public class LoginWithEmailCommand extends HystrixObservableCommand<Boolean> { 
    // stuff... 
} 

Mit einem Test, der wie folgt aussieht:

@RunWith(MockitoJUnitRunner.class) 
public class ExampleTest { 

    @Mock 
    Observable<Result> mockObs; 

    @Test 
    public void mockwtf() { 
     LoginWithEmailCommand cmd = mock(LoginWithEmailCommand.class); 
     when(cmd.toObservable()).thenReturn(mockObs); 
     cmd.toObservable(); 
    } 
} 

Allerdings laufen diese Testergebnisse in einem Nullpointer:

java.lang.NullPointerException bei com.netflix.hystrix.AbstractCommand.toObservable (AbstractCommand.java:342) bei com.netflix.hystrix.HystrixObservableCommand.toObservable (HystrixObservableCommand.java:35)

Warum hält die wirkliche .toObservable() angerufen werden? einen Haltepunkt Einstellung zeigt, dass das LoginWithEmailCommand Objekt ist ein generiertes, Objekt proxied erstellt werden ...

Noch ein Hinweis:

@Override 
public Observable<Boolean> toObservable() { 
    return super.toObservable(); 
} 

... gibt es: Wenn ich diese Überschreibung in die ObservableCommand, verspotten Werke hinzufügen ein sauberer Weg, um dies zu tun, als inObservable Überschreibungen unbenutzt zu machen?

+0

Siehe auch: https://github.com/mockito/mockito/issues/398 –

Antwort

0

Das ist meine Lösung hierfür ist, so weit - vielleicht gibt es einen sauberen Weg ...

Schritt 1: Erstellen Sie ein neues BaseCommand in meinem Paket:

public abstract class BaseCommand<T> extends HystrixObservableCommand<T> { 
    // protected ctors go here 

    @Override 
    public Observable<T> toObservable() { 
     return super.toObservable(); 
    } 
} 

Schritt 2: Erweitern meine Befehle von dieser Basis stattdessen.

public class LoginWithEmailCommand extends BaseCommand<Boolean> { 
    // stuff... 
} 

und jetzt funktionieren die Mocks korrekt.