NPE (source2 - ноль) в тестировании RxJava Mockito - PullRequest
0 голосов
/ 27 ноября 2018

Я разрабатываю приложение для Android с использованием шаблонов Kotlin, RxJava2, Retrofit и MVP.

Я пишу тестовый код JUnit для Presenter.

@Mock
lateinit var mockRestService: RestService

@Before
fun setup() {
    MockitoAnnotations.initMocks(this)

    mResPresenter = MainPresenter(
        view = mockView,
        restService = mockRestService
    )
}

@Test
fun test1() {
    val id = "id_01"
    val res = Res()

    // I am mocking in here:
    Mockito.`when`(mockRestService.updateRes(id, res)).thenReturn(Observable.just(res))
    Mockito.`when`(mockRestService.operateRes(id)).thenReturn(Observable.just(res))

    mResPresenter.operateRes(res)

    Mockito.verify(mockView).enableCancelButton(View.VISIBLE)
    Mockito.verify(mockView).onResOperating(res)
}

Но в моем коде Presenter возникла исключительная ситуация NullPointerException.

java.lang.NullPointerException: source2 имеет значение null

Ниже приведен код моего докладчика.

class MainPresenter(
    val view: MainContract.View,
    val restService: RestService
): MainContract.Presenter {
    override fun operateRes(vararg res: Res) {
        view.enableCancelButton(View.VISIBLE)

        disposable.add(
            Observable.fromIterable(res.toList())
                .concatMap { res ->
                    val updateRes = restService.updateRes(id, res)
                    val operateRes = restService.operateRes(id) // I am mocking it, but this is null... why?...

                    Observable.concat(updateRes, operateRes) // NPE occurred in here
                }
                .window(2)
                .subscribeOn(Schedulers.io())
                .subscribe({
                    disposable.add(
                        it.subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe {
                                view.onResOperating(it)
                            }
                    )
                })
        )
    }
}

Согласно сообщению об исключении: "operaRes "является нулем.Но я издеваюсь над этим.

В чем проблема? ... Как мне это исправить? ...

...