Intereting Posts
Сгладить итератор двумерного массива в Котлине Библиотека сохранности Android Room и Kotlin Перегрузка равна BigDecimal в Котлине Ошибки Kotlin и EasyMock Неразрешенный справочник sqrt () Kotlin Val не может переназначить ошибку времени компиляции для локальной переменной в fun в kotlin Kotlin – Как я могу получить доступ к моей новой функции расширения класса из другого файла Использование неверного отчета Dagger2 @ Subcomponent.Builder Как исправить мой код, чтобы удалить предупреждение о литье? Kotlin Generics и nullable Тип класса «Ни одна из следующих функций не может быть вызвана с аргументами, предоставленными« с топливным HTTP-протоколом » Разбор xml kotlin android Запрос андроидов КонтактыКонтракт в Котлине Как делиться PDF-файлами через почтовые приложения и Google Диском без Drive API? Класс Kotlin Custom View реализует интерфейс, который не может быть разрешен в `: app: compileDebugKotlinAfterJava`. Идентичная версия Java отлично работает

TestScheduler не работает (Kotlin + RxJava2 + mockito)

Я хотел написать единичный тест, который будет проверять метод 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() } ,  @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() } ,  @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(deviceUtil.apiVersion()).thenReturn("apiversion")
whenever(deviceUtil.apiVersion()).thenReturn("apiversion") 

Вы указали, что хотите вернуть «apiversion», но фактический request объявлен несколько иным образом:

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

Эти две строки не равны, поэтому Mockito не может вернуть Observable , которого вы ожидаете.

Измените "osversion" на "apiversion" .