android - Completable 中的单个 delaySubscription 等效项
问题描述
在我的一个测试中(我是测试新手,欢迎任何反馈)我可以Single
通过调用手动触发 a 的完成delayer.onComplete()
。有了这个,我可以测试loadingObservable: LiveData<Boolean>
在进行网络请求时是否设置为真,在完成时是否设置为假。我怎样才能达到同样的效果Completable
?
// This test works fine
@Test
fun repositoryGetAllCategoriesBeforeItEnds_loadingObservableValueIsTrue() {
// Arrange
val delayer = PublishSubject.create<Void>()
`when`(categoryRepositoryImpl.getAllCategories()).thenReturn(Single.just(categoryResponse)
.delaySubscription(delayer))
// Act
val categoryViewModel = CategoryViewModel(categoryRepositoryImpl, networkUtils)
// Assert
assertEquals(true, categoryViewModel.loadingObservable.value)
delayer.onComplete()
}
// This test does not compile in the line mentioned below
@Test
fun repositoryPostCategoryBeforeItEnds_loadingObservableValueIsTrue() {
// Arrange
val delayer = PublishSubject.create<Void>()
`when`(categoryRepositoryImpl.getAllCategories()).thenReturn(Single.just(categoryResponse))
`when`(categoryRepositoryImpl.postCategory(any()))
.thenReturn(Completable.complete().delaySubscription(delayer)) // <-- THIS LINE DOES NOT COMPILE
// Act
val categoryViewModel = CategoryViewModel(categoryRepositoryImpl, networkUtils)
categoryViewModel.newCategory("new category")
// Assert
assertEquals(true, categoryViewModel.loadingObservable.value)
delayer.onComplete()
}
解决方案
您可以将主题转换为可完成:
`when`(categoryRepositoryImpl.postCategory(any()))
.thenReturn(delayer.ignoreElements())
否则,您必须模拟delaySubscription
via andThen
:
delayer.ignoreElements().andThen(Completable.complete())
推荐阅读
- docker - 如何在 Travic CI 中更改项目语言?
- c# - 具有依赖注入的构造函数在 react asp.net 核心应用程序中导致 http 500 错误
- python - Django 序列化程序输出作为 JSON 对象的一部分
- c++ - 使用可变参数模板重载函数模板:英特尔 c++ 编译器版本 18 产生与其他编译器不同的结果。英特尔错了吗?
- rx-swift - 使用 RxTableViewSectionedReloadDataSource 配置单元格时如何设置单元格委托
- mysql - mysql 5.6 中的性能问题
- javascript - 条件赋值和返回赋值背后的逻辑是什么
- css - 从箭头中删除背景颜色
- javascript - 如何在javascript中将时间与时间字符串相加?
- c - 为什么在为 cortex m4 交叉编译 gsl 库时出现此错误