Verify interactions in rxjava subscribers(验证 rxjava 订阅者中的交互)
问题描述
在 MVP 模式中描绘您的演示者订阅返回观察者的服务的情况:
Picture the situation in an MVP pattern where your presenter subscribes to a service returning an observer:
public void gatherData(){
service.doSomeMagic()
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(new TheSubscriber());
}
现在类 TheSubscriber 从视图中调用 onNext 一个方法,比如:
Now the class TheSubscriber calls onNext a method from the view, say:
@Override public void onNext(ReturnValue value) {
view.displayWhatever(value);
}
现在,在我的单元测试中,我想验证在非错误情况下调用方法 gatherData() 时,视图的方法 displayWhatever(value) 被调用.
Now, in my unit test I would like to verify that when the method gatherData() is called on a non-erroneous situation, the view's method displayWhatever(value) is called.
问题:
有没有干净的方法来做到这一点?
Is there a clean way to do this?
背景:
- 我正在使用 mockito 来验证交互,当然还有更多
- Dagger 正在注入除
TheSubscriber 之外的整个 Presenter
- I'm using mockito to verify the interactions and a lot more of course
- Dagger is injecting the entire presenter except for
TheSubscriber
我尝试了什么:
- 注入订阅者并在测试中模拟它.我觉得有点脏,因为如果我想改变演示者与服务交互的方式(说不是 Rx),那么我需要改变很多测试和代码.
- 模拟整个服务.这还不错,但需要我模拟很多方法,但我并没有完全达到我想要的效果.
- 在互联网上四处查找,但似乎没有人有一种干净直接的方法来做到这一点
感谢您的帮助
推荐答案
假设您正在以类似的方式使用 service 和 view 的接口:
Assuming that you are using interfaces for service and view in a similar manner:
class Presenter{
Service service;
View view;
Presenter(Service service){
this.service = service;
}
void bindView(View view){
this.view = view;
}
void gatherData(){
service.doSomeMagic()
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(view::displayValue);
}
}
然后可以提供模拟来控制和验证行为:
It is possible then to provide mock to control and verify behaviour:
@Test void assert_that_displayValue_is_called(){
Service service = mock(Service.class);
View view = mock(View.class);
when(service.doSomeMagic()).thenReturn(Observable.just("myvalue"));
Presenter presenter = new Presenter(service);
presenter.bindView(view);
presenter.gatherData();
verify(view).displayValue("myvalue");
}
这篇关于验证 rxjava 订阅者中的交互的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:验证 rxjava 订阅者中的交互
基础教程推荐
- NSString intValue 不能用于检索电话号码 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
