Android 使用Kotlin在JUnit中进行API调用
我是自动测试的初学者,所以我想做一个API调用来更新后端的一些数据,我想用JUnit4进行测试。问题是当我想订阅时,他会抛出NPE 我的测试类看起来像:Android 使用Kotlin在JUnit中进行API调用,android,junit,kotlin,rx-java2,dagger-2,Android,Junit,Kotlin,Rx Java2,Dagger 2,我是自动测试的初学者,所以我想做一个API调用来更新后端的一些数据,我想用JUnit4进行测试。问题是当我想订阅时,他会抛出NPE 我的测试类看起来像: class PhoneNumberPresenterTest { @Mock private val userService: UserService? = null val testScheduler = TestScheduler() val scheduler = TestSchedulerProvid
class PhoneNumberPresenterTest {
@Mock
private val userService: UserService? = null
val testScheduler = TestScheduler()
val scheduler = TestSchedulerProvider(testScheduler)
@Before
fun setup() {
//init stuffs
}
@Test
fun onContinueClicked_ResponseSuccess() {
val phoneNumber = "(01234567890)"
val genericResponse = GenericResponse<CheckApprovedStatusResponse>()
genericResponse.data = CheckApprovedStatusResponse()
`when`(userService!!.checkUserApprovedStatus(phoneNumber)).thenReturn(just(genericResponse))
presenter!!.onContinueClicked(phoneNumber)
testScheduler.triggerActions()
///stuffs
}
更新
mUserService.checkUserApprovedStatus(电话号码)为空这里的想法很简单。您必须在演示者(或任何类)中提供计划程序: 在您的匕首中,只需提供SchedulerProvider的一些重要实现 而在测试中仅提供:
class YourTestSchedulerProvider(private val scheduler: Scheduler) : YourSchedulerProvider {
override fun io(): Scheduler {
return scheduler
}
override fun ui(): Scheduler {
return scheduler
}
override fun computation(): Scheduler {
return scheduler
}
}
并在单元测试中使用它,例如:
val testScheduler = TestScheduler()
val scheduler = YourTestSchedulerProvider(testScheduler)
val presenter = YourPresenter(..., scheduler)
@Test
fun test() {
(...)
presenter.someFun()
testScheduler.triggerActions()
}
“.subscribeOn(scheduler.io())”给我nullPointerException。你知道为什么吗?我猜调度程序是空的。检查它是否正确地注入到Presenterrit的内部。它不为null,但大小、计数器、时间为0。这可能是个问题吗?很抱歉,这里不可能给你任何答案。我不知道你在写什么样的“尺寸、计数器、时间”。但是,如果您100%确定NPE来自该特定行,那么这可能是由于您正在调用的空调度程序或空可观测值。这个错误可能与建议的解决方案无关。这相当于执行问题
class YourTestSchedulerProvider(private val scheduler: Scheduler) : YourSchedulerProvider {
override fun io(): Scheduler {
return scheduler
}
override fun ui(): Scheduler {
return scheduler
}
override fun computation(): Scheduler {
return scheduler
}
}
val testScheduler = TestScheduler()
val scheduler = YourTestSchedulerProvider(testScheduler)
val presenter = YourPresenter(..., scheduler)
@Test
fun test() {
(...)
presenter.someFun()
testScheduler.triggerActions()
}