android - 如何测试 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 操作?
解决方案
目前尚不清楚为什么您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()
}
推荐阅读
- flutter - 在 ListView 中颤动 z-index - 不在堆栈中
- c# - 如何做 GetAsyncKeyState (Keys.Variable < 0)
- discord.js - Discord.js - 机器人不会停止向嵌入发送垃圾邮件(而不是要求用户做出反应)
- r - 对数据集进行排序并更改 R 中的列
- ruby-on-rails - rails中citext字段类型的大小写不敏感排序
- node.js - 如何修复 TypeError 模型不是构造函数?
- java - 用于 double ** 内任何内容的 Java 正则表达式 ** 示例:**text**
- c - 带有 max() 的 OpenACC 缩减子句
- python - 在 Pandas 中创建布尔值频率的汇总表
- html - 内联块无法在 HTML 电子邮件中工作时遇到问题