使用虚拟时间测试基于时间的反应堆堆芯流

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 = mutableListOf<Long>()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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab二维数组排序函数,Matlab 用sort函数排序 二维数组

在Matlab中排序某个向量(一维)时&#xff0c;可以使用sort(A)&#xff0c;其中A为待排序的向量&#xff0c;如果仅是用来排序A&#xff0c;那么直接使用sort(A)即可&#xff0c; 如果排序后还需要保留原来的索引可以用返回值&#xff0c;即[B,ind]sort(A)&#xff0c;计算后&am…

多个cuda 被单进程沾满_报名 | 提高GPU利用率,听英伟达专家分享这个CUDA工具

随着 NVIDIA GPU 计算性能的不断提升&#xff0c;如何提升 GPU 利用率是开发者普遍关心的问题之一。从 Kepler 架构开始&#xff0c;NVIDIA GPU 支持多个 CUDA kernels 函数的并发执行&#xff0c;称为 Hyper-Q 技术。Hyper-Q 技术支持多个 CUDA streams、多个 CPU threads 或者…

usb转ttl模块与matlab,USB接口转TTL小板的自检测试

现在电脑基本上都不会配置DB9串行数据端口了&#xff0c;这给一些喜欢折腾刷机和单片机加载程序的朋友带来了诸多的不便。还好&#xff0c;随着技术的发展&#xff0c;USB接口转TTL的产品越来越成熟&#xff0c;而这种产品主要以采用PL-2303HX芯片作为主控器的居多&#xff0c;…

程序员python工作_程序员如何在工作中进步

工作&#xff0c;对于大部分人都是不可避免的一件事&#xff0c;有的人是为了生存&#xff0c;有的人是为了自我价值的实现&#xff0c;也有人是为了将来不工作而现在努力工作&#xff0c;出发点可能各种各样&#xff0c;但是工作总是大部分人不可避免的一部分。程序员&#xf…

matlab 误差椭圆,求3倍标准差误差椭圆分析的程序

根据《白话空间统计之九&#xff1a;方向分布(标准差椭圆)修正版》(有些地方没有理解清楚)&#xff0c;写了下面的程序。但是好像结果不对Zmvnrnd([0.5 1.5], [0.025 0.03 ; 0.03 0.16], 50);XZ(:,1); YZ(:,2);mean_Xnanmean(X); mean_Ynanmean(Y); %椭圆圆心%确定长短半轴…

java ee cdi_Java EE CDI处理程序方法示例

java ee cdi这是CDI Disposer方法的教程。 在CDI中&#xff0c;由于Producer方法生成的对象随后可以注入到应用程序中&#xff0c;因此使用Disposer方法&#xff0c;以便在其工作完成时将其删除。 Disposer方法始终与Producer方法匹配。 Disposer方法使用的一个示例是当应用程…

python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

因为是示例为主&#xff0c;我们将方程组限制在二元一次方程组&#xff1a;x,y两个变量&#xff0c;两个方程。类似这样&#xff1a;每个方程有两个变量&#xff0c;x和y&#xff0c;形式为&#xff1a;axbycd由于这次有了两个方程&#xff0c;我们提取参数的代码就适合提炼为一…

快速提示:使用Chrome开发工具调试GWT应用程序

调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前&#xff0c;经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点&#xff0c;并使用调试模式来跟踪错误和错误。 现在&#xff0c;在超级开发模式下&#xff0c;情况有…

用matlab做纹理合成,关于图像纹理合成的Matlab例程

纹理是普遍存在的视觉现象&#xff0c;其可以描述地形、植物、矿石、纤维和皮肤等等物体的表面特征。纹理结构在图像中反映其图像像素取值的空间变化情况&#xff0c;这种变化具有某中统计规律&#xff0c;在纹理区域内的各部分具有大致相同的结构。纹理合成是利用计算机产生纹…

python 服务端与c++客户端通讯_[原创]python socket 服务端 与 c++客户端通讯,发包内容加密,支持大文件,并发...

代码经过网络搜索,综合算是原创吧.py脚本为服务端项目文件在https://github.com/jinjie412/service_client_socketimport socketserverimport jsonimport base64import osfrom te import OPMysql,Caltimeimport time#数据库操作opm OPMysql()#加密发包内容def crypt(source,ke…

matlab评估边缘检测性能,【模糊推理】模糊逻辑图像边缘检测,原理+matlab代码~...

这篇博客是接着上一篇来哒&#xff0c;https://blog.csdn.net/luolan9611/article/details/94285158本篇博客及上篇博客搜集的资料、实验代码、实验报告、PPT均已上传至百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1AmT4TtBAxj1FKf4KUFcsBw 提取码&#x…

qt中实现左右分割线_Qt项目中,实现屏幕截图并生成gif的详细示例(值得细读)...

总第50篇平时我们在工作和学习的过程中&#xff0c;有时需要将桌面的某些动作截图生成gif动图&#xff0c;以更生动地呈现出来。目前有很多这样的软件&#xff0c;并且方便易使用&#xff0c;比如我经常使用的GifCam&#xff0c;软件小巧&#xff0c;生成的图片文件也比较小&am…

构建Spring Boot RESTful服务+ Spring Boot执行器

总览 什么是REST&#xff1f; REST&#xff08;代表状态转移&#xff09;是Web构建的体系结构样式&#xff0c;已成为用于Web应用程序的标准软件设计模式 。 代表性国家转移一词最早由REST的发起人&#xff0c;HTTP规范的主要作者之一Roy Fielding在其博士论文中使用 。 REST上…

matlab 安装glpk,mac上安装GLPK

Obsolation note:Thanks to Dave Coleman’s comment I found out that glpk is available through homebrew now! So you just need these 2 steps to get glpk now:homebrewbrew install glpkIf you still want to read on, the old way is still here…So you want copy-pas…

tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...

格力变频空调快速维修方法及技巧一、 室内部分&#xff1a; 1、F1开路&#xff1a;制冷时不启动或启动一下就停机&#xff1b;制热正常&#xff0c;且一直高频运转。 2、F2开路&#xff1a;工作6—10分钟就停机&#xff0c;显示E2停止外机。 3、F2短路&#xff1…

php 档案,PHP 档案包 (PHAR)

PHP 档案包 (PHAR)要获取 PHPUnit&#xff0c;最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR)&#xff0c;它将 PHPUnit 所需要的所有必要组件(以及某些可选组件)捆绑在单个文件中&#xff1a;要使用 PHP档案包(PHAR)需要有 phar 扩展。要使用 PHAR 的 --self-update 功能需…

pycharm是不是python编程_使用PyCharm进行python开发的简介

使用PyCharm进行python开发的简介这个是很常见的一个问题&#xff0c;我想学习python&#xff0c;用什么编辑器呢&#xff1f;eclipsepydev?IDLE?vim?每个人有自己的习惯&#xff0c;可能是自己琢磨的&#xff0c;也可能是前辈指导的&#xff0c;这里只分享自己孤陋寡闻琢磨…

php自动释放mysql连接,php怎么关闭mysql连接

php怎么关闭mysql连接2021-03-17 07:45:43php中可使用mysqli_close()函数来关闭mysql连接&#xff0c;语法格式“mysqli_close(connection);”。mysqli_close()函数可关闭先前打开的数据库连接&#xff0c;如果成功返回TRUE&#xff0c;反之则返回FALSE。本教程操作环境&#x…

Java 8 –按值对HashMap进行升序和降序排序

在上一篇文章中&#xff0c;我向您展示了如何通过键对Java 8中的Map进行排序 &#xff0c;今天&#xff0c;我将教您如何使用Java 8功能&#xff08;例如&#xff0c;lambda表达式&#xff0c;方法引用&#xff0c;流和新方法&#xff09; 按值对Map进行排序。添加到java.util.…

python处理wps表格数据匹配_WPS表格技巧—如何利用WPS表格实现数据分组

小伙伴们在工作中经常会遇到这种情况&#xff0c;密密麻麻的数据看着都让人眼晕&#xff0c;处理起来更是费劲&#xff0c;稍不留心&#xff0c;就看错了&#xff0c;为了使数据看起来更有条理性&#xff0c;有的小伙伴常常会用筛选的功能实现数据之间的互换和操作。但是却很少…