Я разрабатываю приложение для 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 "является нулем.Но я издеваюсь над этим.
В чем проблема? ... Как мне это исправить? ...