如何测试 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 模拟下一步操作?

目前还不清楚为什么在loadData()方法中有一个无法从外部访问的本地PublishSubject,因此无法以当前形式触发它。

您可以将其替换为保存初始值的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()
}

最新更新