在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验证交互,当然还有更多
>除了TheSubscriber之外,Dagger正在注射整个演示者
我试过了什么:
>注入订阅者并在测试中模拟它.看起来有点脏,因为如果我想改变演示者与服务交互的方式(说不是Rx),那么我需要改变很多测试和代码.
>模拟整个服务.这不是那么糟糕,但要求我嘲笑很多方法而且我没有完全达到我想要的.
>在互联网上查看,但没有人似乎有一个干净的直接方式这样做
谢谢您的帮助
解决方法:
假设您以类似的方式使用接口进行服务和查看:
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); }}
然后可以提供模拟来控制和验证行为:
@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");}
总结 以上是内存溢出为你收集整理的android – 验证rxjava订阅者中的交互全部内容,希望文章能够帮你解决android – 验证rxjava订阅者中的交互所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)