rx-java - 如何在RxJava中使用TestScheduler

标签 rx-java

我应该如何使用RxJava的TestScheduler?我来自.NET背景,但是RxJava中的TestScheduler似乎与.NET rx中的测试计划程序工作方式不同。

这是我要测试的示例代码

Observable<Long> tick = Observable.interval(1, TimeUnit.SECONDS);
contactsRepository.find(index)
  .buffer(MAX_CONTACTS_FETCH)
  .zipWith(tick, new Func2<List<ContactDto>, Long, List<ContactDto>>() {
    @Override
    public List<ContactDto> call(List<ContactDto> contactList, Long aLong) {
      return contactList;
    }
  }).subscribe()


我试过了:

subscribeOn(testScheduler)
testScheduler.advanceTimeBy(2, TimeUnit.SECONDS);
testScheduler.triggerActions();


没有运气。

最佳答案

我举了一个关于如何使用TestScheduler的小例子。我认为它与.NET实现非常相似

@Test
public void should_test_the_test_schedulers() {
    TestScheduler scheduler = new TestScheduler();
    final List<Long> result = new ArrayList<>();
    Observable.interval(1, TimeUnit.SECONDS, scheduler).take(5).subscribe(result::add);
    assertTrue(result.isEmpty());
    scheduler.advanceTimeBy(2, TimeUnit.SECONDS);
    assertEquals(2, result.size());
    scheduler.advanceTimeBy(10, TimeUnit.SECONDS);
    assertEquals(5, result.size());
}


https://github.com/bric3/demo-rxjava-humantalk/blob/master/src/test/java/demo/humantalk/rxjava/SchedulersTest.java

编辑
根据您的代码:应该将调度程序传递给Observable.interval操作,因为这是您要控制的:

    TestScheduler scheduler = new TestScheduler();

    Observable<Long> tick = Observable.interval(1, TimeUnit.SECONDS, scheduler);
    Subscription toBeTested = Observable.from(Arrays.asList(1, 2, 3, 4, 5))
            .buffer(3)
            .zipWith(tick, (i, t) -> i)
            .subscribe(System.out::println);

    scheduler.advanceTimeBy(2, TimeUnit.SECONDS);

关于rx-java - 如何在RxJava中使用TestScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699147/

相关文章:

java - 刷新 token rxjava+retrofir2

java - 如何创建 2 个 zip 并合并可观察值?

java - RxJava takeUntil 与最后一项的排放?

java - RxJava -- 终止无限流

retrofit - 是否可以同步运行可观察的改造?

android - 如何顺序执行两个可观察对象?

android - 如何将 OkHttp 日志记录到 Crashlytics

android - RxJava - 重复 API 调用直到返回所有项目

java - Rx java 内存不足

android - RxBinding出错后如何重新绑定(bind)View?