以MVP模式描述您的演示者订阅返回观察者的服务的情况:
public void gatherData(){
service.doSomeMagic()
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(new TheSubscriber());
}
现在,班级TheSubscriber
从视图中调用onNext
方法,例如:
@Override public void onNext(ReturnValue value) {
view.displayWhatever(value);
}
现在,在我的单元测试中,我想验证当在非错误情况下调用方法gatherData()
时,将调用视图的方法displayWhatever(value)
。
问题:
有干净的方法吗?
背景:
TheSubscriber
我尝试了什么:
感谢您的帮助
答案 0 :(得分:2)
我知道它已经很晚但可能对某人有所帮助,因为我很长时间搜索了你的问题:D
对我来说,最后添加 void gatherData() {
service.doSomeMagic()
.compose(getSchedulerTransformer())
.subscribe(view::displayValue);
}
private <T> Observable.Transformer<T, T> getSchedulerTransformer() {
if (mTransformer == null) {
mTransformer = (Observable.Transformer<T, T>) observable -> observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
return mTransformer;
}
void setSchedulerTransformer(Observable.Transformer<Observable<?>, Observable<?>> transformer) {
mTransformer = transformer;
}
如下:
setSchedulerTransformer(observable -> {
if (observable instanceof Observable) {
Observable observable1 = (Observable) observable;
return observable1.subscribeOn(Schedulers.immediate())
.observeOn(Schedulers.immediate());
}
return null;
});
设置Transformer只是我刚刚通过了这个:
@Before
因此,只需在测试中添加presenter.setSchedulerTransformer
方法并调用dict comprehension
,它应该能够对此进行测试:)
希望这有所帮助,并且在某种程度上可以理解:D