【发布时间】:2015-07-14 16:10:53
【问题描述】:
以 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)。
问题:
有没有干净的方法来做到这一点?
背景:
- 我正在使用 mockito 来验证交互,当然还有更多
- Dagger 正在注入除
TheSubscriber之外的整个演示者
我尝试了什么:
- 注入订阅者并在测试中模拟它。对我来说看起来有点脏,因为如果我想更改演示者与服务交互的方式(不是 Rx),那么我需要更改很多测试和代码。
- 模拟整个服务。这还不错,但需要我模拟很多方法,但我并没有完全达到我想要的效果。
- 在互联网上四处查找,但似乎没有人有一种干净直接的方法来做到这一点
感谢您的帮助
【问题讨论】:
-
MVP 是一个超载的术语。我认为MVP View也是接口,可以注入Presenter。因此,您可以为应用程序注入 Activity/Fragment 并为测试注入 mockito 模拟。
-
是的,视图被注入和模拟了。这里的问题是如何轻松配置模拟的
service以调用订阅者的方法,这些方法最终会从视图中调用。 -
你问的是
when(service.doSomeMagic()).thenReturn(Observable.just("yourvalue-with-correct-type"));吗? -
有时最简单的解决方案并不那么明显。是的,您的评论实际上有所帮助。不得不做一些额外的事情,但这与我的应用程序有关。要添加答案吗?