我需要测试这样的东西
Observable.just(1).delay(20, SECONDS)
对于测试,我使用了trampoline调度程序
Observable.just(1).delay(20, SECONDS, schedulers.getComputation())
并且为了测试它返回Schedulers.trampoline()
但是这个测试在20秒内完成
我应该使用什么测试调度程序或最佳测试模式来立即获得测试结果,所有其他测试模式继续工作。
就像在链接博客中一样,假设你有一个这样的类:
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();
}
}