java实现debounce_RxJava如何测试debounce?

我正试图在Android中测试RxJava2的“debounce”操作符。

我使用了“debounce”操作符作为搜索功能。

etSearch.addTextChangedListener(object : TextWatcher {

override fun afterTextChanged(editable: Editable) {

mPresenter.search(editable.toString())

}

...

})

演示者在这里:

class MyPresenter(

private val view: MyContract.View,

private val apiService: ApiServie = ApiServiceImpl(),

private val searchSubject: PublishSubject = PublishSubject.create(),

var debounceScheduler: Scheduler = Schedulers.computation()

) : MyContract.Presenter {

init {

setupSearch()

}

override fun search(keyword: String) {

if (searchDisposable.size() == 0) {

setupSearch()

}

searchSubject.onNext(keyword)

}

private fun setupSearch() {

searchSubject.debounce(1000, TimeUnit.MILLISECONDS, debounceScheduler)

.distinctUntilChanged()

.switchMap { keyword ->

apiService.search(keyword)

}

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe { response ->

response.data?.let { data ->

view.searchResult(data)

}

}

}

}

实际上,当我做集成测试时,它工作得很好。

但我想做的是测试MyPresenter类的“搜索”功能。

但它不起作用。。。

我的测试代码在这里:

class MyTest {

@Mock

private lateinit var mockView: MyContract.View

@Mock

private lateinit var mockApiService: ApiService

private lateinit var mMyPresenter: MyPresenter

private lateinit var inOrder: InOrder

private val mTestScheduler: TestScheduler = TestScheduler()

private val ZERO = 0

private fun setUpScheduler() {

val immediate = object : Scheduler() {

override fun createWorker() = ExecutorScheduler.ExecutorWorker(Runnable::run)

}

RxJavaPlugins.setInitIoSchedulerHandler { immediate }

RxAndroidPlugins.setInitMainThreadSchedulerHandler { immediate }

}

@Before

fun setup() {

MockitoAnnotations.initMocks(this)

setUpScheduler()

mMyPresenter = MyPresenter(mockView, mockApiService)

inOrder = inOrder(mockView)

}

@Test

fun searchBillsTest() {

`when`(mockApiService.search("America"))

.thenReturn(Observable.just(mockResult))

mMyPresenter.debounceScheduler = mTestScheduler

mMyPresenter.search("America")

mTestScheduler.advanceTimeBy(1000, TimeUnit.MILLISECONDS)

verify(mockView).searchResult(mockResult)

}

}

最后一次验证没有调用。。。

我在打印日志时添加了“doOnNext”以在“searchSubject”中查找原因,但“doOnNext”不被称为。。。

“doOnSubscribe”被称为。。。

你知道为什么吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值