junit5和junit4_JUnit 5符合AssertJ

junit5和junit4

JUnit 5在断言库中带来了很多改进,这主要归功于Java 8和Lambda Expression的支持以及新断言(如assertAllassertTimeoutassertThrows 。 尽管我非常喜欢JUnit 5,但我相信AssertJ在生产级单元测试中仍然是必不可少的,并且我将继续使用它。

但是我认为在单个单元测试中可能会混合使用JUnit 5和AssertJ:其中之一是将JUnit assertAll与AssertJ assertThat混合。

JUnit 5 – assertAll

Assertions.assertAll断言所有提供的可执行文件均不会引发异常:

List<String> owners = Arrays.asList("Betty Davis", "Eduardo Rodriquez");// assert
assertAll(() -> assertTrue(owners.contains("Betty Doe"), "Contains Betty Doe"),() -> assertTrue(owners.contains("John Doe"), "Contains John Doe"),() -> assertTrue(owners.contains("Eduardo Rodriquez"), "Eduardo Rodriquez")
);

上面将报告2个错误:

org.opentest4j.MultipleFailuresError: Multiple Failures (2 failures)Contains Betty Doe ==> expected: <true> but was: <false>Contains John Doe ==> expected: <true> but was: <false>

assertAll执行所有传递的可执行文件,并确保所有传递(不引发异常)。 换句话说, assertAll允许分组的断言。

另外, assertAll可用于创建从属断言:

List<String> owners = Arrays.asList("Betty Davis", "Eduardo Rodriquez");// assert
assertAll(() -> {assertTrue(owners.contains("Betty Doe"), "Contains Betty Doe");assertAll(() -> assertNotNull(owners),() -> assertTrue(owners.size() > 1));}
);

在上面的例子中,当第一assertTrue失败后续assertAll将被跳过。

AssertJ –软断言

注意:我在本文中写了有关SoftAssertions的更多信息: AssertJ软断言–我们需要它们吗?

AssertJ提供的SoftAssertions基本上与JUnit 5 assertAll相同, assertAll略有不同,不支持从属断言。

List<String> owners = Arrays.asList("Betty Davis", "Eduardo Rodriquez");assertSoftly(softAssertions -> {softAssertions.assertThat(owners).contains("Betty Doe");softAssertions.assertThat(owners).contains("John Doe");softAssertions.assertThat(owners).contains("Eduardo Rodriquez");}
);

报告的错误:

1) 
Expecting:<["Betty Davis", "Eduardo Rodriquez"]>
to contain:<["Betty Doe"]>
but could not find:<["Betty Doe"]>at AssertJAssertionsTest.lambda$assertsSoftly$0(AssertJAssertionsTest.java:26)
2) 
Expecting:<["Betty Davis", "Eduardo Rodriquez"]>
to contain:<["John Doe"]>
but could not find:<["John Doe"]>

将JUnit assertAll与AssertJ assertThat混合

混合JUnit的5 assertAll与AssertJ assertThat断言似乎是一个不错的选择:

// arrange
String givenName = "Jean";
String expectedCity = "Monona";
String expectedAddress = "105 N. Lake St.";// act
Optional<Owner> result = testObj.findByName(givenName);// assert
assertThat(result).isPresent();assertAll(() -> assertThat(result.get().getFirstName()).isEqualTo(givenName),() -> assertThat(result.get().getCity()).isEqualTo(expectedCity),() -> assertThat(result.get().getAddress()).isEqualTo(expectedAddress)
);

另一方面, assertAll可以用作assertThat的参数:

// arrange
String givenName = "Jean";
String expectedCity = "Monona";
String expectedAddress = "105 N. Lake St.";// act
Optional<Owner> result = testObj.findByName(givenName);// assert
assertThat(result).hasValueSatisfying(owner -> assertAll(() -> assertThat(owner.getFirstName()).isEqualTo(givenName),() -> assertThat(owner.getCity()).isEqualTo(expectedCity),() -> assertThat(owner.getAddress()).isEqualTo(expectedAddress)
));

摘要

尽管JUnit 5是一个很棒的框架,它为断言提供了很多东西,但我认为无论如何还是需要像AssertJ这样的第三方断言库来增加断言的趣味性。 我已经使用AssertJ几年了,我认为我不会放弃它。 但是我肯定在测试中看到了新的JUnit 5 assertAll的空间。 特别是在集成测试中。

可以在以下GitHub存储库中找到此博客文章(以及更多内容)中的所有示例: https : //github.com/kolorobot/junit5-samples *

*非常感谢Maciej Koziara为该资源库做出了贡献。

翻译自: https://www.javacodegeeks.com/2017/11/junit-5-meets-assertj.html

junit5和junit4

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

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

相关文章

微信html人脸识别接口,微信人脸识别可视化的实现:

实现方式主要通过以下模块实现&#xff1a;DateFromWebChat (从网页版微信窗口下载好友头像)AI (识别模块&#xff0c;主要用于识别好友头像是否为人脸&#xff0c;并且计算人脸的数量与头像的总数且return)DateVisul (数据可视化模块&#xff0c;用与AI模块返回参数的可视化)u…

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景&#xff1a;对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

Linux 命令之 tree -- 以树状图列出目录的内容/查看目录内容

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;按树形结构显示当前目录下的内容&#xff08;二&#xff09;按树状图显示当前目录下的所有目录名称而非文件&#xff08;三&#xff09;列出指定目录下的第一层级的文件和目录名称&#xff08;四&#…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章&#xff0c;主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架&#xff08;angularjs&#xff0c;angular&#xff0c;jquery和react&#xff09;的流行和流行的速度。 这篇文章的关键指标是每月关于…

html 定时刷新 数据,js中,设置定时器 每隔几秒刷新一次页面数据

页面加载进来&#xff0c;查询 然后设置定时器 每隔五秒刷新一次页面数据fnSearch();var interval3setInterval(function(){fnSearch();},5000);function fnSearch(){searchjson.search$(".iptsearch").val();$.ajax({url:/movecheck/getCheckInfo,data:searchjson,…

查询varchar实际大小_微服务和VUE(11): mybatis 动态查询

1. 新建class表和student表&#xff1a;CREATE TABLE class ( class_id varchar(20) NOT NULL, class_name varchar(50) DEFAULT NULL, headmaster_name varchar(20) DEFAULT NULL, headmaster_tel varchar(20) DEFAULT NULL, PRIMARY KEY (class_id)) ENGINEInnoDB …

Linux 中 ctime,mtime,atime 的区别

文章目录改变和修改的区别ctimemtimeatime查看文件时间关于 relatime改变和修改的区别 改变和修改之间的区别在于是改变文件的属性还是改变文件的内容。如果有人说 chmod a-w myfile&#xff08;删除所有用户对文件 myfile 的写权限&#xff09;&#xff0c;那么这叫改变&…

java迭代器删除两个_两个迭代器的故事

java迭代器删除两个当您查看最流行的Java面试问题时&#xff0c;您可能会遇到有关故障快速和故障安全迭代器的问题&#xff1a; 故障快速迭代器和故障安全迭代器之间有什么区别&#xff1f; 简化的答案是&#xff1a; 如果在迭代过程中修改了集合&#xff0c;则快速失败迭代器…

Linux 命令之 stat -- 显示文件的状态信息

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;显示文件的状态信息&#xff08;二&#xff09;以简洁方式输出文件的状态信息&#xff08;三&#xff09;显示文件所属的文件系统状态信息一、命令介绍 用于显示文件的状态信息。stat命令…

python tkinter滚动条不起作用_Tkinter滚动条不工作

我有一段运行在python3.4上的tkinter代码&#xff0c;它是一个放在画布上的带有垂直滚动条的大框架&#xff0c;但是滚动条是灰色的&#xff0c;似乎没有与框架的大小相关联。我使用的代码基本上是&#xff1a;class EntryWindow:def __init__(self, master):self.master mast…

大工17秋《计算机文化基础》在线测试1,大工17秋《组织行为学》在线测试1答案...

大工17秋《组织行为学》在线测试1一、单选题&#xff1a;1.根据气质的分类&#xff0c;较适合做推销工作的人员的气质类型是( )。 (满分:3)A.胆汁质B.多血质C.抑郁质D.黏液质正确答案:[hide]——B——[/hide]2.组织行为学在中观层面所要研究的主要内容是( )。 (满分:3)A.个体心…

java分页中显示更多_早期更多失败– Java 8

java分页中显示更多快速失败或早期失败是一种软件工程概念&#xff0c;旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生。 在之前的博客文章和演示中&#xff0c;我将详细介绍这种方法的优点&#xff0c;在此博客文章中&#xff0c;我将详细介绍Java 8中该思…

计算机组装与维修单招,单招职二 计算机组装与维修试卷.doc

单招职二 计算机组装与维修试卷高二 计算机组装与维修试卷一、填空题(每空1分&#xff0c;共计30分)1.一个完整的计算机系统是由______________和______________两部分组成的。2.为了更好的为CPU散热&#xff0c;在安装风扇前&#xff0c;先在CPU芯片的顶部均匀地涂抹上一层___…

普通人学python好吗_有人问,普通人学python真的有意义吗?看看大家都是怎么说的吧...

普通人学python有意义吗&#xff1f;现在随着python越来越火&#xff0c;尤其是它成为了人工智能的第一编程语言&#xff0c;还被纳入了中小学的教育中。并且python的应用范围很广泛&#xff0c;可以解决很多专业或非专业的问题。但python真的适合普通人学习吗&#xff1f;我个…

Linux 如何安装程序的源代码软件包/源码程序包/源码包?

文章目录一、安装源码包的三个步骤&#xff08;一&#xff09;执行命令 configure&#xff0c;进行配置/检测&#xff08;二&#xff09;执行命令 make&#xff0c;编译源码&#xff08;三&#xff09;执行命令 make install&#xff0c;安装软件二、源码包安装示例&#xff08…

大文件拆分小文件求top_将文件拆分为流

大文件拆分小文件求top上周&#xff0c;我讨论了类Pattern新的&#xff08;since 1.8&#xff09;方法splitAsStream只能根据流的需要从字符序列中读取字符序列&#xff0c;并且不能继续进行模式匹配以创建所有可能的元素并返回它作为流。 这种行为是流的本质&#xff0c;它是支…

如何取消ie.html,IE浏览器安全警告怎么关闭

部分用户在使用IE浏览器打开某些页面的时候&#xff0c;可能会出现一个“安全警告”的对话框&#xff0c;虽然影响不大&#xff0c;但是每次出现都让人很烦闷&#xff0c;这个时候你就可以根据下面的操作去关闭这个功能。自从百度近日开启了HTTPS安全网页功能之后&#xff0c;每…

sql 计算两个小数乘积_数学篇|学会这些数学计算技巧,想不满分都难!

计算是小学数学的基础&#xff0c;四则运算和混合运算是计算要考察的重点。在这里我们总结了小学用到的所有计算定律和简便方法&#xff0c;包括运算定律、运算法则、运算顺序和速算技巧四大部分&#xff0c;帮助小学生牢固掌握数学知识点。先赞后看&#xff0c;收获满满&#…

Linux 如何关闭防火墙

一、使用 System V init 作为初始化系统的 Linux&#xff08;例如&#xff1a;CentOS 6.x&#xff09; 关闭防火墙的命令&#xff1a; chkconfig iptables off或 service iptables stop二、使用 systemd 作为初始化系统的 Linux&#xff08;例如&#xff1a;CentOS 7.x&#…

java学习2018年_Java 20年

java学习2018年二十年前&#xff0c;在苏黎世的一间公寓里发生了两件事。 我的女儿迈出了第一步&#xff0c;一位年轻的博士后研究员&#xff08;她的父亲&#xff09;迈出了使用Java的第一步。 很难完全了解当时的Java。 在这些时代&#xff0c;TCL盛行&#xff0c;Java时代与…