Completable 中的单个 delaySubscription 等价物
Single delaySubscription equivalent in Completable
在我的一个测试中(我是测试新手,欢迎任何反馈)我可以通过调用 delayer.onComplete()
手动触发 Single
的完成。有了这个,我可以测试 loadingObservable: LiveData<Boolean>
在进行网络请求时是否设置为 true,在完成时是否设置为 false。我怎样才能用 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())
否则,您必须通过 andThen
:
模拟 delaySubscription
delayer.ignoreElements().andThen(Completable.complete())
在我的一个测试中(我是测试新手,欢迎任何反馈)我可以通过调用 delayer.onComplete()
手动触发 Single
的完成。有了这个,我可以测试 loadingObservable: LiveData<Boolean>
在进行网络请求时是否设置为 true,在完成时是否设置为 false。我怎样才能用 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())
否则,您必须通过 andThen
:
delaySubscription
delayer.ignoreElements().andThen(Completable.complete())