我正在尝试为上面的例子编写一个单元测试。如何模拟和测试发布主题返回结果
我有一个发布主题
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()
}