【发布时间】:2017-03-22 20:53:19
【问题描述】:
我有这样的java代码
mDataManager.getObservable("hello").subscribe( subscriber );
我想verify 以下 Observable 是 .subscribe()
我试图模拟 getObservable() 和 verify
Observable<Response> res = mock(Observable.class);
when(mDataManager.getObservable("hello")).thenReturn(res);
verify(res).subscribe();
但是有一个错误
Caused by: java.lang.IllegalStateException: onSubscribe function can not be null.
at rx.Observable.subscribe(Observable.java:8167)
at rx.Observable.subscribe(Observable.java:8158)
at rx.Observable.subscribe(Observable.java:7962)
....
Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: omni.neo.hk.omniapiservice.v4.model.external.UserLoginBean.class
at rx.exceptions.OnErrorThrowable.addValueAsLastCause(OnErrorThrowable.java:109)
at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:187)
at rx.internal.operators.OperatorDoOnEach$1.onNext(OperatorDoOnEach.java:82)
... 48 more
我认为 mock 不可能在这里使用 Observable,但如果没有模拟的 Observable 我不能这样做verify(res).subscribe()
在这种情况下有什么建议吗?
【问题讨论】:
-
你能发布完整的代码吗?我的意思是一个可运行的版本。
-
为什么要模拟一个 Observable,而不是通过它推动一个值,看看你是否得到了你想要的动作?
-
但您是在尝试证明您的系统有效,对吧?似乎
verify调用subscribe比在更新 Observable 时观察您的被测类更改状态更有趣和有用。所以不用担心验证,只要改变一个真正的 Observable 的值,看看会发生什么。 -
@JeffBowman 我想在
verify(res).subscribe();中实现的是知道 observable 实际上是订阅的。我们在编码时有时会错过subscribe() -
我觉得这个问题绝对值得回答
标签: java unit-testing mockito rx-java observable