Reputation: 1660
I tested the Rxjava
methods many times without problem but now i faced with this problem :
Null pointer exception
in this subscribeOn(Schedulers.io())
line.
fun registerPhone(phoneNumber: String, nationalId: String) {
val disposable =
mRepository.getRegister(jsonObjectToRequestBody(phoneNumber, nationalId))
.subscribeOn(Schedulers.io()) //NPE in this line
.
.
.
}
I used Mockito
when
before it but i dont know why this problem cause until now and this is my test
method :
class ViewModelTest : BaseTest() {
private val mResponseBody = ResponseBody.create(
null, ""
)
private var mGson= Gson()
private val mRequestBody = RequestBody.create(null, mGson.toJson(Register("123", "123")))
.
.
.
@Test
fun registerPhone_success() {
Mockito.`when`(mRepository.getRegister(mRequestBody)).thenReturn(
Single.just(
Response.success(mResponseBody)
)
)
mViewModel.registerPhone("123", "123")
}
}
This is my base test
:
open class BaseTest {
@Before
fun setUpClass() {
RxJavaPlugins.reset()
RxAndroidPlugins.reset()
val immediate = object : Scheduler() {
override fun scheduleDirect(run: Runnable, delay: Long, unit: TimeUnit): Disposable {
return super.scheduleDirect(run, 0, unit)
}
override fun createWorker(): Worker {
return ExecutorScheduler.ExecutorWorker(Executor { it.run() }, true)
}
}
RxJavaPlugins.setInitIoSchedulerHandler { scheduler -> immediate }
RxJavaPlugins.setInitComputationSchedulerHandler { scheduler -> immediate }
RxJavaPlugins.setInitNewThreadSchedulerHandler { scheduler -> immediate }
RxJavaPlugins.setInitSingleSchedulerHandler { scheduler -> immediate }
RxAndroidPlugins.setInitMainThreadSchedulerHandler { scheduler -> immediate }
RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
RxJavaPlugins.setComputationSchedulerHandler { Schedulers.trampoline() }
RxJavaPlugins.setNewThreadSchedulerHandler { Schedulers.trampoline() }
RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }
}
@After
fun tearDownClass() {
RxJavaPlugins.reset()
RxAndroidPlugins.reset()
}
}
Upvotes: 1
Views: 628
Reputation: 19250
I think you are testing this in wrong way. Try this:
class ViewModelTest : BaseTest() {
private val mResponseBody = ResponseBody.create(
null, ""
)
private var mGson= Gson()
private val mRepository = mock()
@Test
fun registerPhone_success() {
whenever(mRepository.getRegister(any())).thenReturn(
Single.just(
Response.success(mResponseBody)
)
)
mViewModel.registerPhone("123", "123")
}
}
Upvotes: 1