lambdas for

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

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

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

  1. lambdas_借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

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

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

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

  3. java8柯里化_借助Java 8实现柯里化

    在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.这 ...

  4. lambdas for_Java 8 Lambdas –缺少脱离Java的链接

    lambdas for 我学习了函数式编程,但是后来我决定我更喜欢命令式编程,于是我转回去. -没人 从命令式编程过渡到函数式编程是当今非常普遍的事情. 互联网上的博客文章充斥着关于它的证词. 我读过 ...

  5. Java 8 Lambdas –缺少脱离Java的链接

    我学习了函数式编程,但是后来我决定我更喜欢命令式编程,于是我转回去. -没人 从命令式编程过渡到函数式编程是当今非常普遍的事情. 互联网上的博客文章充斥着关于它的证词. 我读过的所有内容以及与我交谈过 ...

  6. Java对string按空格切分_使用Java 8流(lambdas)将空格分割为字符串

    我正在编写一个Xor方法,通过向其字符添加(作为xor操作)随机值来编写一些字符串.结果应该看起来像带有加密字符的十六进制值的字符串. 例: "Hello world"=> ...

  7. lambdas for_Java 8发布了! — Lambdas教程

    lambdas for 为了庆祝几分钟前发布的Java 8的发布,我正在发布Java 8 Lambdas教程的草稿版本. 这是学习Streams API的一种很好的可视化方式,从第一天开始,它将帮助您 ...

  8. java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...

  9. MySQL8.0.11借助java程序实现增删等功能(跳坑记,功能待添加)

    网上有的那些内容我就不再赘述了,只说挡住我的几个"巨坑". (注意,以下内容仅适用于MySQL8.0级及以上版本,JDK8及以上版本,网上的例子随影的版本大多很陈旧) 一定要安装M ...

最新文章

  1. mysql-二进制日志
  2. Alpha版使用说明
  3. IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决
  4. python保存数据_Python 保存数据的方法(4种方法)
  5. SharePoint 2010 WSP包部署过程中究竟发生什么?
  6. 十字连接焊盘_PCB板上的那些“特殊焊盘 “到底起什么作用?
  7. python装饰器测试_python 装饰器
  8. Spring IOC整理
  9. 此操作要求使用 IIS 集成管线模式
  10. c++程序内嵌lua字节码
  11. linux 怎么关闭输入法快捷键设置方法,关闭输入法快捷键
  12. 高速下载百度网盘资料(Tampermonkey+百度网盘直链下载助手+xdown)
  13. 学习光线跟踪一样的自3D表征Ego3RT
  14. 熟练运用计算机快捷键,有效利用Excel和电脑快捷键
  15. Python 文件操作出现错误(result, consumed) = self._buffer_decode(data, self.errors, final)
  16. tp5子域名index.php,tp5实现绑定子域名,并且根据子域名定义路由规则
  17. 在线教育项目02_前端知识(es6、vue)
  18. STC15F2K60S2单片机入门:编写头文件
  19. freeswitch使用自签证书,配置WSS
  20. Python获取局域网内可连通的主机ip地址

热门文章

  1. 莫比乌斯反演 做题记录
  2. 【模拟】【递归】解压字符串(jzoj 1519)
  3. Wannafly挑战赛19
  4. 23、java中的网编基础
  5. Spark SQL(九)之基于用户的推荐公式
  6. Sentinel(十九)之主流框架的适配
  7. Spring 注入集合
  8. Oracle入门(十二G)之序列
  9. Spring入门(三)之IoC
  10. 《走遍中国》珍藏版(十三)