网站修改思路,seo网站建设优化什么意思,什么叫做电商平台,微信小程序插件开发Reactor Core实现了Reactive Streams规范#xff0c;并处理了#xff08;可能无限的#xff09;数据流。 如果您感兴趣#xff0c;请查看它提供的出色文档 。 在这里#xff0c;我假设对Reactor Core库的Flux和Mono类型有一些基本的了解#xff0c;并且将介绍Reactor Cor… Reactor Core实现了Reactive Streams规范并处理了可能无限的数据流。 如果您感兴趣请查看它提供的出色文档 。 在这里我假设对Reactor Core库的Flux和Mono类型有一些基本的了解并且将介绍Reactor Core提供了对时间本身的抽象从而可以测试依赖于时间的函数。 对于某些Reactor核心运营商来说时间是一个重要的考虑因素-例如“间隔”功能的一种变体它在初始“延迟” 10秒后每5秒发出一个递增的数字 val flux Flux.interval(Duration.ofSeconds(10), Duration.ofSeconds(5)).take(3) 根据正常时间流逝测试这样的数据流将是可怕的这样的测试大约需要20秒才能完成。 Reactor-Core提供了一种解决方案一种对时间本身的抽象-基于虚拟时间的调度程序它提供了一种确定性的方式来测试这些类型的操作的巧妙方法。 让我以两种方式展示它一种明确的方式应该使基于虚拟时间的调度程序的动作非常清晰然后再推荐使用Reactor Core进行测试的方法。 import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import reactor.core.publisher.Flux
import reactor.test.scheduler.VirtualTimeScheduler
import java.time.Duration
import java.util.concurrent.CountDownLatchclass VirtualTimeTest {Testfun testExplicit() {val mutableList mutableListOfLong()val scheduler VirtualTimeScheduler.getOrSet()val flux Flux.interval(Duration.ofSeconds(10), Duration.ofSeconds(5), scheduler).take(3)val latch CountDownLatch(1)flux.subscribe({ l - mutableList.add(l) }, { _ - }, { latch.countDown() })scheduler.advanceTimeBy(Duration.ofSeconds(10))assertThat(mutableList).containsExactly(0L)scheduler.advanceTimeBy(Duration.ofSeconds(5))assertThat(mutableList).containsExactly(0L, 1L)scheduler.advanceTimeBy(Duration.ofSeconds(5))assertThat(mutableList).containsExactly(0L, 1L, 2L)latch.await()}} 1.首先将“ Flux.interval”功能的计划程序设置为基于虚拟时间的计划程序。 2.预计在10秒延迟后每5秒发射一次数据流 3. VirtualTimeScheduler提供了一种“ advanceTimeBy”方法来将虚拟时间提前一个持续时间因此该时间将首先提前10秒的延迟时间届时将发出第一个元素0。 4.然后将其前进5秒钟两次分别得到1和2。 这是确定性的测试可以快速完成。 但是此版本的测试很丑陋它使用列表来收集和声明结果并使用CountDownLatch控制何时终止测试。 测试Reactor-Core类型的一种更为简洁的方法是使用出色的StepVerifier类并且使用该类的测试如下所示 import org.junit.Test
import reactor.core.publisher.Flux
import reactor.test.StepVerifier
import reactor.test.scheduler.VirtualTimeScheduler
import java.time.Durationclass VirtualTimeTest {Testfun testWithStepVerifier() {VirtualTimeScheduler.getOrSet()val flux Flux.interval(Duration.ofSeconds(10), Duration.ofSeconds(5)).take(3)StepVerifier.withVirtualTime({ flux }).expectSubscription().thenAwait(Duration.ofSeconds(10)).expectNext(0).thenAwait(Duration.ofSeconds(5)).expectNext(1).thenAwait(Duration.ofSeconds(5)).expectNext(2).verifyComplete()}} 借助StepVerifier进行的这项新测试可以很好地理解每步前进的时间并断言当时的期望值。 翻译自: https://www.javacodegeeks.com/2017/09/testing-time-based-reactor-core-streams-virtual-time.html