我正在尝试为上述示例编写单元测试。如何模拟和测试PublishSubject返回结果
我有一个PublishSubject
fun loadData() {
val publishSubject = PublishSubject.create<Boolean>()
publishSubject.subscribe {
if(it) {
view.onSuccess()
} else {
view.onError()
}
}
useCase.loadDataFromServer(publishSubject)
}
@Test
fun load_Data_From_Server_Success_Test() {
presenter.loadData()
verify(view).onSuccess()
}
但是onSuccess方法不会调用( 如何使用Mockito或PowerMockito模拟onNext动作?
答案 0 :(得分:0)
目前还不清楚为什么在PublishSubject
方法中有一个本地loadData()
,而从外部无法访问它,因此无法以当前形式触发它。
您可以将其替换为具有初始值的BehaviorSubject
:
fun loadData() {
val subject = BehaviorSubject.createDefault(true) // <----------------
subject.subscribe {
if(it) {
view.onSuccess()
} else {
view.onError()
}
}
useCase.loadDataFromServer(subject)
}
@Test
fun load_Data_From_Server_Success_Test() {
presenter.loadData()
verify(view).onSuccess()
}
或将主题暴露在字段中,然后从测试方法中调用onNext
val subject = PublishSubject.create();
fun loadData() {
subject.subscribe {
if(it) {
view.onSuccess()
} else {
view.onError()
}
}
useCase.loadDataFromServer(subject)
}
@Test
fun load_Data_From_Server_Success_Test() {
presenter.loadData()
subject.onNext(true) // <-----------------------------------------
verify(view).onSuccess()
}