lambdas for_借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

lambdas for

AssertJ和Awaitility是在自动代码测试中使用的两个我最喜欢的工具。 不幸的是直到最近,还不能一起使用它。 但是随后Java 8进入了游戏,几十行代码足以使其在Awaility 1.6.0中实现。

awaitility_logo_red_small


AssertJ提供了一组丰富的断言,其中包含非常有用的错误消息,所有这些消息都可以通过流畅的类型识别 API获得。 Awaitility允许表达简明异步调用的期望和易于阅读的方式利用其缩短测试时间的积极等待模式(没有更多的睡眠(5000)!)。

一年前,当我正在使用复杂事件处理 (CEP)进行算法交易项目时,就想到了将其一起使用的想法,而我不喜欢仅针对具有Awaitility的异步测试学习Hamcrest断言。 我能够进行工作的PoC ,但是它需要在AssertJ(然后是FEST Assert)代码中进行一些重大重复,因此我搁置了这个想法。 一个月前,我正在为4Developers会议准备有关异步代码测试的演示文稿,并问自己一个问题:Java 8如何简化Awaitility的使用?

在少数示例中,我将使用asynchronousMessageQueue消息队列,该消息可用于发送ping请求并返回接收到的数据包的数量。 在Java 7中(除了基于代理的条件之外)使用Awaitility测试它的一种方法是创建一个Callable类实例:

@Testpublic void shouldReceivePacketAfterWhileJava7Edition() {//whenasynchronousMessageQueue.sendPing();//thenawait().until(receivedPackageCount(), equalTo(1));}private Callable<Integer> receivedPackageCount() {return new Callable<Integer>() {@Overridepublic Integer call() throws Exception {return asynchronousMessageQueue.getNumberOfReceivedPackets();}};}

其中equalTo()是标准的Hamcrest匹配器。

减少冗长的第一个想法是用lambda表达式替换Callable并内联private方法:

@Testpublic void shouldReceivePacketAfterWhile() {//whenasynchronousMessageQueue.sendPing();//thenawait().until(() -> asynchronousMessageQueue.getNumberOfReceivedPackets(), equalTo(1));}

好多了。 以后的lambda表达式可以用方法参考代替:

@Testpublic void shouldReceivePacketAfterWhile() {//whenasynchronousMessageQueue.sendPing();//thenawait().until(asynchronousMessageQueue::getNumberOfReceivedPackets, equalTo(1));}

有人甚至可以进一步删除Hamcrest匹配器:

@Testpublic void shouldReceivePacketAfterWhile() {//whenasynchronousMessageQueue.sendPing();//thenawait().until(() -> asynchronousMessageQueue.getNumberOfReceivedPackets() == 1);  //poor error message}

但是尽管它仍然可以正常工作,但错误消息的意义变得不那么重要了:

ConditionTimeoutException: Condition with lambda expression in
AwaitilityAsynchronousShowCaseTest was not fulfilled within 2 seconds.

而不是很清楚:

ConditionTimeoutException: Lambda expression in AwaitilityAsynchronousShowCaseTest
that uses AbstractMessageQueueFacade: expected <1> but was <0> within 2 seconds.>

解决方案是在lambda表达式中使用AssertJ断言:

@Testpublic void shouldReceivePacketAfterWhileAssertJEdition() {//whenasynchronousMessageQueue.sendPing();//thenawait().until(() -> assertThat(asynchronousMessageQueue.getNumberOfReceivedPackets()).isEqualTo(1));}

并且由于新的AssertionCondition最初在几分钟之内被黑客入侵,在Awaitility 1.6.0中就成为了现实。 当然,会保留AssertJ流利的API和针对不同数据类型的有意义的故障消息。

另外,所有引发AssertionError的断言(尤其是TestNG和JUnit标准断言)也可以在lambda表达式中使用(但我不知道有人知道AssertJ的功能回到了“标准”断言中)。

令人高兴的是, 更改本身利用Runnable类来实现lambda和AssertJ支持,而Awaitility 1.6.0仍与Java 5兼容。 但是,出于可读性考虑,仅在基于Java 8的项目中使用新结构才有意义。

顺便说一句,这是我在4Developers上的演讲的“ 幻灯片 ”。

翻译自: https://www.javacodegeeks.com/2014/04/using-assertj-and-awaitility-together-thanks-to-java-8-and-lambdas.html

lambdas for

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

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

相关文章

多家大厂接连停产,半导体“最后一里路”面临“瘫痪”?

“6月4日&#xff0c;中国台湾半导体封测龙头企业京元电子发布公告称&#xff0c;因为疫情影响&#xff0c;公司开始全面停产48小时。” 而事实上台湾疫情急剧恶化&#xff0c;停产48小时的确是“天真”了&#xff01; 半导体“最后一里路” 台媒称&#xff0c;京元电子从事的业…

为什么“鸿蒙”不是第二个“安卓”,如何看待Harmony OS里的Android痕迹?

​华为将在6月2日晚8点举办鸿蒙操作系统及华为全场景新品发布会。官方微博也在同一时间更名为Harmony OS&#xff0c;同时更新了鸿蒙操作系统的开机视频。——Harmony OS会带来哪些改变&#xff1f; “鸿蒙”走过的那些路 Harmony OS 历程 2012年&#xff0c;发布EMUI 1.0&…

什么是单片机

单片机也就是单片微型计算机的简称&#xff0c;由于单片机主要作用于控制领域&#xff0c;所以国际上也通常将单片机称之为微型控制器&#xff0c;单片机与微型计算机都是由CPU、存储器和输入/输出接口等组成的&#xff0c;但两者又有所不同&#xff0c;微型计算机和单片机的基…

光纤中继器的防雷及日常维护方法介绍

光纤中继器是一款中继器&#xff0c;支持以太网 10Mbps、100Mbps、155Mbps、622Mbps、1000Mbps&#xff08;1.25G&#xff09;的任何传输速率&#xff0c;产品广泛应用在光信号放大和光接口转换的通信场景中。今天&#xff0c;飞畅科技的小编来为大家详细介绍下光纤中继器的防雷…

单片机常用的几种通信协议

在单片机的应用中&#xff0c;通信协议是其中必不可少的一部分&#xff0c;上位机与下位机&#xff0c;单片机与单片机&#xff0c;单片机与外设模块之间的通信都需要通信协议实现信息交换和资源共享。由于设备之间不同的传输速率、电气特性、可靠性要求的不同&#xff0c;也产…

Wi-Fi和WLAN有什么区别

随着手机和电脑的不断普及&#xff0c;人们的生活也越来越离不开无线网络。 平常我们说的连WI-FI其实也就是连接无线网络&#xff0c;但是无论是手机还是电脑上&#xff0c;连接网络的那一栏显示的却是WLAN&#xff0c;而不是WI-FI。这两者难道不一样吗&#xff1f;它们有什么…

光纤中继器的安装调试

随着光通信领域的应用逐渐深入&#xff0c;国内通信厂商也逐渐开始自主研发光纤中继器产品&#xff0c;国产中继器的出现使得整个光纤中继器的成本大幅下降&#xff0c;此时&#xff0c;单模光缆和光纤中继器也逐步成熟&#xff0c;使得传输距离更远&#xff0c;效果更好&#…

weakreference_Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别...

weakreference很长一段时间以来&#xff0c;WeakReference和SoftReference都已添加到Java API中&#xff0c;但是并不是每个Java程序员都熟悉它。 这意味着在Java中使用WeakReference和SoftReference的位置和方法之间存在差距。 参考类对于“垃圾收集 ” 如何工作尤为重要。 众…

物联网应用:蓝牙模块在智能门锁中的应用

在现如今&#xff0c;智能门锁的使用已经很广泛了&#xff0c;其原因更多的是智能系统的概念正在逐步改变人们的生活。而基于网络蓝牙的智能门锁、WIFI网络方案智能门锁、基于指纹识别的指纹门锁乃至是人脸识别、虹膜识别的门锁成为了更多人的选择。 智能门锁方案的应用场景 …

“攻城狮”手把手教你物联网智能生活-内网穿透技术

“攻城狮”手把手教你物联网智能生活-内网穿透技术 内网穿透技术&#xff0c;即实现外网IP访问内网IP而发展起来的一种计算机技术。在了解内网穿透技术之前&#xff0c;我们需要先了解IP和内网外网的概念。 IP&#xff08;InternetProtocol&#xff09;是指的 “网络之间互连…

光模块常见故障与使用注意事项详解

光模块未正确安装常见故障有哪些&#xff1f;怎样才是正确的安装方法以及光模块注意事项有哪些&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 光模块常见故障 1、光模块端口被污染&#xff0c;会造成光模块无法正常使用。光模块端口有异物堵塞&a…

怎样辨别光模块的真假?

光模块(optical module)由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括发射和接收两部分。简单的说&#xff0c;光模块的作用就是光电转换&#xff0c;发送端把电信号转换成光信号&#xff0c;通过光纤传送后&#xff0c;接收端再把光信号转换成电信号。那么…

云智能遥控开关设备再物联网领域的应用:智能养殖高效、生态、安全!

随着我国水土流失日益严重&#xff0c;土地资源严重紧缺&#xff0c;水产养殖池塘已经成为一种趋势&#xff0c;但由于现代气候突变现象日益发生&#xff0c;效益下降等问题突出&#xff0c;如何提高养殖产品品质&#xff0c;直接增加了渔民的经济收入&#xff0c;实现高效、生…

串口光猫设备结构及主要特点介绍

串口光猫是RS-232/422/485串口数据通过光纤媒质传输数据的通信产品&#xff0c;它采用金属外壳&#xff0c;支持工业导轨式安装、壁挂式安装等多种安装方式&#xff0c;同时提供RS-232/422/485接口。那么&#xff0c;串口光猫的设备结构及主要特点有哪些呢&#xff1f;接下来我…

【教程】E103-W10无线串口服务器TCP协议与PC连接收发数据详解!

一、前期准备 打开串口工具&#xff0c;以XCOM V2.6为例&#xff0c;验证AT指令。 如果未识别串口&#xff0c;请按下面的步骤安装相应的驱动。 1.检查并安装串口驱动程序 PC打开“控制面板” &#xff0c;进入“硬件和声音”&#xff0c;选择“设备管理器”。 2.进入“设…

串口光猫应用领域及技术参数详解

串口光猫是RS-232/422/485串口数据通过光纤媒质传输数据的通信产品&#xff0c;它采用金属外壳&#xff0c;支持工业导轨式安装、壁挂式安装等多种安装方式&#xff0c;同时提供RS-232/422/485接口。那么&#xff0c;串口光猫应用领域及技术参数有哪些呢&#xff1f;接下来我们…

【案例】无线串口模块 星型网络组网 案例

星型网络技术 01 什么是星型网络 星型网络是有两种网络设备构成&#xff1a;中心节点和终端节点。中心节点是整个星型网络的枢纽&#xff0c;所有终端节点通过无线或者有线的形式连接到中心节点&#xff0c;与中心节点进行信息交互。终端节点之间不能直接进行信息交互&#xf…

工业级光纤收发器的芯片介绍

工业级光纤收发器的芯片是整个设备的核心&#xff0c;它和一些硬件设备决定了工业级光纤收发器的性能、寿命等是否满足要求。那么&#xff0c;对于光电介质转换芯片的性能具体有哪些呢&#xff1f;下面飞畅科技就给大家详细讲解一下&#xff0c;希望大家对工业级光纤收发器有更…

8口poe交换机产品介绍

八口POE交换机&#xff08;POE31008P&#xff09;提供了从一个网络节点利用5类以太网线的电源和数据的传输。81端口快速以太网端口能用于10/100Mps的连接&#xff0c;其中8个端口可以提供工业标准的IEEE802.3af电源。先进的自感知算法只为标准PD终端设备供电&#xff0c;因而不…

8口PoE网口供电交换机适用环境介绍

8口POE供电网络交换机 “永不烧设备”智能POE交换机&#xff0c;先进的自感知算法只为IEEE 802.3af终端设备供电&#xff0c;因而不需要去担心会损坏私有标准的PoE或非PoE设备。智能供电系统&#xff0c;过载保护&#xff0c;打破传统电力线布局限制&#xff0c;支持8口通过5类…