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;常见的有路由器、光纤收发器、网卡、交换机、网线、服务器故障&#xff0c;那么网络设备故障怎么办…

Java ArrayDeque

介绍&#xff1a; Java中的ArrayDeque是实现Deque接口的类。 它是双端队列的基于数组的实现。 顾名思义&#xff0c;双端队列是允许我们在前端和后端添加或删除项目的队列。 在开始之前&#xff0c;让我们快速看一下ArrayDeque上的一些值得注意的点&#xff1a; ArrayDeque没…

什么是单片机

单片机也就是单片微型计算机的简称&#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;效果更好&#…

【渝粤教育】国家开放大学2018年秋季 0688-22T老年精神障碍护理 参考试题

科目编号&#xff1a;0691 座位号&#xff1a; 2018-2019学年度第一学期期末考试 物理化学及实验试题 2019年1月 一、填空题&#xff08;每空4分&#xff0c;共40分&#xff09; 在质点平动运动中有&#xff1a;质量和牛顿第二定律&#xff0c;在刚体转动运动中与之相类似&a…

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

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

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

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

【渝粤教育】国家开放大学2018年秋季 0710-22T幼儿园课程活动设计 参考试题

科目编号&#xff1a;0716 座位号 2018-2019学年度第一学期期末考试 工程建设法规 试题 2019年 1 月 一、单选题&#xff08;本大题共5小题&#xff0c;每小题6分&#xff0c;共计30分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序号的答题框中★&#xff09;…

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

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

【渝粤教育】国家开放大学2018年秋季 1042t国际经济法 参考试题

试卷代号&#xff1a;1050 金融理论前沿课题 试题&#xff08;开卷&#xff09; 2019年1月 一、名词解释&#xff08;每小题5分&#xff0c;共15分&#xff09; 1&#xff0e;垄断优势理论&#xff1a; 2&#xff0e;铸币税&#xff1a; 3&#xff0e;赫芬达尔指数&#xff1a;…

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

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

GitHub上的OpenJDK

创建 Skara项目的目的是“……调查JDK源代码的替代SCM和代码审查选项&#xff0c;包括基于Git而不是Mercurial的选项&#xff0c;以及由第三方托管的选项。” OpenJDK skara-dev邮件列表包括Robin Westberg上周发布的帖子&#xff0c;该帖子宣布&#xff1a;“我们在https://gi…

【渝粤教育】国家开放大学2018年秋季 1116t机电控制工程基础 参考试题

试卷代号&#xff1a;1125 医疗保障原理与政策 试题 2019年1月 一、选择题&#xff08;每题3分&#xff0c;共24分&#xff09; 1&#xff0e;目前我国城镇职工的医疗保险模式为( )。&#xff08;单选题&#xff09; A&#xff0e;社会统筹 B&#xff0e;个人账户 C&#xff0e…

E104-BT02蓝牙无线传输模块物联网芯片的智能控制、采集

蓝牙技术是一种常见的无线连接技术&#xff0c;得益于智能手机的普及&#xff0c;蓝牙越来越多的应用于我们的生活之中。蓝牙连接的设备随处可见&#xff0c;它方便、快捷&#xff0c;只要有手机进行简单的配对就可以对相关的设备进行控制&#xff0c;不需要专业的控制设备&…

【渝粤教育】国家开放大学2018年秋季 1162t开放英语4 参考试题

试卷代号&#xff1a;1183 公共政策概论 试题 2019年1月 一、单项选择题&#xff08;每题2分&#xff0c;共10分&#xff09; 1.指出“公共政策”即为“公共”而制定的政策的是学者( )。 A.药师寺泰藏 B.罗伯特达尔 C.米歇尔哈蒙 D.伍德罗威尔逊 2.将公共政策主体划分为官方决策…