测试RxJava .delay(20,SECONDS)

问题描述 投票:1回答:1

我需要测试这样的东西

Observable.just(1).delay(20, SECONDS)

对于测试,我使用了trampoline调度程序

Observable.just(1).delay(20, SECONDS, schedulers.getComputation())

并且为了测试它返回Schedulers.trampoline()但是这个测试在20秒内完成

我应该使用什么测试调度程序或最佳测试模式来立即获得测试结果,所有其他测试模式继续工作。

unit-testing testing rx-java rx-java2
1个回答
0
投票

就像在链接博客中一样,假设你有一个这样的类:

class DelayedRepository {

    private final Scheduler scheduler;

    DelayedRepository(Scheduler scheduler) {
        this.scheduler = scheduler;
    }

    Observable<Integer> delayedInt() {
        return Observable.just(1)
                .delay(20, SECONDS, scheduler);
    }
}

请注意,通过类的构造函数注入调度程序非常重要。

您的测试可能如下所示:

public class DelayedRepositoryTest {

    DelayedRepository delayedRepository;
    TestScheduler testScheduler;

    @Before
    public void setUp() throws Exception {
        testScheduler = new TestScheduler();
        delayedRepository = new DelayedRepository(testScheduler);
    }

    @Test
    public void testIntegerOneIsEmittedAt20Seconds() {
        //arrange
        TestObserver<Integer> o = delayedRepository.delayedInt()
                .test();

        //act
        testScheduler.advanceTimeTo(20, TimeUnit.SECONDS);

        //assert
        o.assertValue(1);
    }

    @Test
    public void testNothingIsEmittedAt19Seconds() {
        //arrange
        TestObserver<Integer> o = delayedRepository.delayedInt()
                .test();

        //act
        testScheduler.advanceTimeTo(19, TimeUnit.SECONDS);

        //assert
        o.assertEmpty();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.