TestScheduler no funciona (Kotlin + RxJava2 + mockito)

Quería escribir una testing unitaria que verificará el método callInit continuación. Sin embargo, tengo exception de puntero nulo donde la línea tiene que subscribe( . Mi pregunta es ¿cómo verifico las condiciones onnext y onerror en un método como el siguiente?

 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) } ) ) } 

Método de testing:

  @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() } 

EDITAR

 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()) } } 

testing de presentador

  @Before fun setUp() { testScheduler = TestScheduler() interactor = SplashInteractor(initService, TestSchedulerProvider(testScheduler)) presenter = SplashPresenter(contract, interactor, uriWrapper, compositeDisposable, cache, fileUtil, deviceUtil) spyPresenter = Mockito.spy(presenter) } 

Tiene un error tipográfico en una de las siguientes declaraciones:

whenever(deviceUtil.apiVersion()).thenReturn("apiversion")
whenever(deviceUtil.apiVersion()).thenReturn("apiversion") 

Usted ha orderado que devuelva "apiversion", pero la request real se declara de una manera ligeramente diferente:

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

Estas dos cadenas no son iguales, por lo tanto, Mockito no puede devolver el Observable que estás esperando.

Cambiar "osversion" a "apiversion" .

  • ¿Por qué tengo un Log de salida no deseado al fusionar 2 observables en otro Observable, que los almacena temporalmente cada 10 segundos?
  • Cómo crear el controller de respuesta genérica para el error y validar la respuesta utilizando retrofit, rxjava y dagger
  • ¿Hay alguna manera de cambiar mi método a la stream Observable que será una cadena de modificadores?
  • El método de callback a menudo para reenviar el evento a Observable?
  • La function de extensión no crea un nuevo object Observable
  • RxJava2: onComplete no llamado con flatMapIterable
  • RxAndroid - Manejar errores con el operador Zip
  • Excepción causada por: java.lang.ClassNotFoundException: org.reactivestreams.Publisher
  • Descargar un file desde un control remoto y savelo en un dispositivo Android
  • HttpException no capturado por onError ()
  • RxJava Observable.create envolver suscripciones observables