mockito - 是否可以在不添加新方法进行验证的情况下对 onSubscribe 中发生的在 onComplete/onError 中撤消的列表添加/删除进行单元测试?
问题描述
我有一个看起来像下面的完成,我正在尝试用 Mockito 进行测试。
completable
.doOnSubscribe {
list.add(item)
}.doOnError {
list.remove(item)
//do other stuff
}.doOnComplete {
list.remove(item)
//do other stuff
}
该列表管理可能在其他地方(另一个片段或活动)访问的状态,以指示有多少项目仍在处理或它们是否全部完成。
除了创建 add() 和 remove() 方法,然后调用它们并使用 spy 确认它被调用之外,我无法弄清楚如何直接对其进行单元测试,因为订阅它会立即添加和删除它。
这似乎有点矫枉过正,所以我想知道我是否错过了触发 doOnSubscribe 部分的方法?
解决方案
正如 Bob 建议的那样,模拟 ajava.util.List
并验证它:
import static org.mockito.Mockito.*;
import java.util.List;
import org.junit.Test;
import io.reactivex.subjects.CompletableSubject;
public class TestMockitoCalls {
@Test
public void test() {
@SuppressWarnings("unchecked")
List<Integer> list = mock(List.class);
CompletableSubject source = CompletableSubject.create();
source.doOnSubscribe(v -> list.add(1))
.doOnError(e -> list.remove(1))
.doOnComplete(() -> list.remove(1))
.subscribe();
source.onComplete();
verify(list).add(1);
verify(list).remove(1);
verifyNoMoreInteractions(list);
}
}
推荐阅读
- typescript - TypeScript 不兼容的函数签名
- sql - 使用变量更新存储过程中的非英语数据?
- javascript - 在 Django 3 中,如何使用 Javascript 访问我的模板目录?
- shell - 使用 sed 和 hdfs ls 进行更多优化
- azure - Azure Pipelines - 在管道之间共享装载以进行缓存?
- java - 按 XML 文档拆分 XML 流
- android - Android Kotlin Firebase 实时数据库:RecyclerView 显示为空
- git - VisualSVN 服务器
- npm - OctoberCMS 在插件中包含 JavaScript 供应商包
- kubernetes - 等待集群初始化超时,节点自动升级失败/或运行出错