gpt4 book ai didi

android - TestScheduler 不起作用(Kotlin + RxJava2 + mockito)

转载 作者:搜寻专家 更新时间:2023-11-01 09:30:50 25 4
gpt4 key购买 nike

我想编写一个单元测试来验证下面的 callInit 方法。但是,我在该行包含 subscribe( 的地方遇到了空指针异常。我的问题是如何在下面的方法中验证 onnext 和 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<SplashResponse.Init> {
return initService.init(requestInit)
.subscribeOn(schedulerProvider.io())
.flatMap(funcErrorCheckAndTransform())
.flatMap(funcVersionControl())
.observeOn(schedulerProvider.ui())
}

override fun downloadCommercialVideo(commercialLink: String): Observable<File> {
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")

您已指示返回“apiversion”,但实际的 request 声明方式略有不同:


val request = RequestInit(..., ..., "osversion")

这两个字符串相等,因此 Mockito 无法返回您期望的 Observable

"osversion" 更改为 "apiversion"

关于android - TestScheduler 不起作用(Kotlin + RxJava2 + mockito),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47576258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com