TestScheduler不起作用(Kotlin + RxJava2 + mockito)
我想写一个unit testing,将validation下面的callInit
方法。 但是,我有空指针exception行保存subscribe(
。我的问题是我如何validation在下面的方法中的下一个和onerror条件?
override fun callInit() { val requestInit = RequestInit(os = "android", osVersion = deviceUtil.osVersion(), appVersion = deviceUtil.apiVersion()) compositeDisposable.add( interactor.getInit(requestInit) .subscribe( { view.hideProgress() this.commercialLink = it.commercialLink view.updateScreen() }, { error -> view.onError(error) } ) ) }
测试方法:
@Test fun should_update_commerciallink_AND_updateScreen_when_callInit() { val request = RequestInit("android", "version", "osversion") val responseInit = ResponseInit(false, false, "updatelink", "message", "useragreement", "commerciallink") whenever(deviceUtil.osVersion()).thenReturn("version") whenever(deviceUtil.apiVersion()).thenReturn("apiversion") whenever(interactor.getInit(request)).thenReturn(Observable.just(responseInit)) presenter.callInit() testScheduler.triggerActions() verify(view).hideProgress() verify(view).updateScreen() }
编辑
class SplashInteractor(private val initService: InitService, private val schedulerProvider: SchedulerProvider) : SplashContract.Interactor { override fun getInit(requestInit: SplashRequest.Init): Observable { return initService.init(requestInit) .subscribeOn(schedulerProvider.io()) .flatMap(funcErrorCheckAndTransform()) .flatMap(funcVersionControl()) .observeOn(schedulerProvider.ui()) } override fun downloadCommercialVideo(commercialLink: String): Observable { return initService.downloadCommercialLink(commercialLink) .subscribeOn(schedulerProvider.io()) .flatMap(funcDownload(commercialLink)) .observeOn(schedulerProvider.ui()) } }
主持人测试
@Before fun setUp() { testScheduler = TestScheduler() interactor = SplashInteractor(initService, TestSchedulerProvider(testScheduler)) presenter = SplashPresenter(contract, interactor, uriWrapper, compositeDisposable, cache, fileUtil, deviceUtil) spyPresenter = Mockito.spy(presenter) }
whenever
有一个陈述中有一个错字:
whenever(deviceUtil.apiVersion()).thenReturn("apiversion")
whenever(deviceUtil.apiVersion()).thenReturn("apiversion")
你已经指示返回“apiversion”,但实际的request
是以另一种方式声明的:
val request = RequestInit(..., ..., "osversion")
val request = RequestInit(..., ..., "osversion")
这两个字符串是不相等的,因此Mockito不能返回您期望的Observable
。
将"osversion"
改为"apiversion"
。
- 尽管使用RxJava在另一个线程上订阅,但在使用Google的People API时仍然收到IllegalStateExceptionexception
- 找到重复的蓝牙设备。 我在这里双倍浸泡? 也能够更新recyclerview
- 如何防止在Java之前加载碎片的创建?
- 在kotlin android中可以使活动布局的背景变得透明吗?
- Realm&Kotlin访问字段的变量
- JSON到HashMap与使用Gson的对象
- com.android.tools.build:gradle版本高于2.0.0时,无法在物理设备上运行/部署应用程序
- 自定义视图不是在Android中绘制的
- Android Studio不断生成类似Eclipse的文件