2016-04-19 13 views
0

と呼ば取得私はMockitoを使って模擬したいHystrixObservableCommandを持っている:モッキングHystrixObservableCommand結果()

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

次のようになり、テストの場合:

@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(); 
    } 
} 

ただし、このテストを実行するとNullPointerExceptionが発生します。

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

なぜ本当の.toObservableは()キープありません電話していますか? ...

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

があります:私は作品をからかっ、ObservableCommandにこのオーバーライドを追加する場合は、次のブレークポイントを設定すると、別のCLUE

...作成中LoginWithEmailCommandオブジェクトが生成され、プロキシになるオブジェクトであることを示しています未使用のtoObservableオーバーライドを入れる必要があるよりも、この作業を行うためのよりクリーンな方法ですか?

+0

他を見る: https://github.com/mockito/mockito/issues/398 –

答えて

0

これはこれまでのところ、このために私の解決策である - おそらくきれいな方法があります...

ステップ1:私のパッケージに新しいBaseCommandを作成します。

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

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

ステップ2:拡張を代わりにこの基地からの私の命令。

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

これでモックが正しく機能します。