Junit testi Rxjava yöntemi
Oct 04 2020
Ben test Rxjavaetmeden yöntemleri defalarca sorun ama şimdi ben bu ile karşı karşıya sorun : Null pointer exceptionbu subscribeOn(Schedulers.io())hat.
fun registerPhone(phoneNumber: String, nationalId: String) {
val disposable =
mRepository.getRegister(jsonObjectToRequestBody(phoneNumber, nationalId))
.subscribeOn(Schedulers.io()) //NPE in this line
.
.
.
}
Ondan Mockito whenönce kullandım ama bu sorunun neden şimdiye kadar neden olduğunu bilmiyorum ve bu benim testyöntemim:
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")
}
}
Bu benim 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()
}
}
Yanıtlar
1 0xAliHn Oct 04 2020 at 10:49
Sanırım bunu yanlış bir şekilde test ediyorsun. Bunu dene:
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")
}
}
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı