JUnit 5符合AssertJ
JUnit 5在断言库中带来了很多改进,这主要归功于Java 8和Lambda Expression支持以及新断言(如assertAll
, assertTimeout
或assertThrows
。 尽管我真的很喜欢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
相同,但略有不同,即不支持从属断言。
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
JUnit 5符合AssertJ相关推荐
- junit5和junit4_JUnit 5符合AssertJ
junit5和junit4 JUnit 5在断言库中带来了很多改进,这主要归功于Java 8和Lambda Expression的支持以及新断言(如assertAll , assertTimeout或 ...
- junit 5测试异常处理_使用JUnit 5测试异常
junit 5测试异常处理 JUnit 5带来了令人敬畏的改进,并且与以前的版本有很大不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言 ...
- JUnit 5 –基础
JUnit 5是适用于Java的下一代单元测试框架,具有许多有趣的功能,包括嵌套测试,参数化测试,新的扩展API或Java 8支持. 本文展示了JUnit 5的基本概念,包括测试生命周期,参数注入和断 ...
- 使用JUnit 5测试异常
JUnit 5带来了令人敬畏的改进,它与以前的版本有很大的不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言之一非常适合测试异常. 设置 ...
- Springboot Feature翻译
shell本节将深入介绍 Spring Boot 的详情,在这里你能了解到你可以会使用或者自定义的关键特性.如果你还没有准备好,你也许需要去阅读 "getting-started.html& ...
- 利用Diferencia和Java微服务进行分接比较测试
本文要点 在微服务体系结构中,许多服务可能同时在(相对)独立地演化,而且通常非常迅速.要获得这种架构风格的全部价值,服务必须能够独立发布. 通常很难验证新服务(或服务的新版本)没有对当前的应用程序造成 ...
- java无效的源发行版_无效的Java
java无效的源发行版 也许我可以被机器人代替进行代码审查. 有一些反馈我发现自己一遍又一遍. 这是我最不喜欢的一些: 通用代码结构 放弃其他 当if在两端return的else是多余的和不必要的创建 ...
- junit5和junit4_JUnit 5 –基础
junit5和junit4 JUnit 5是适用于Java的下一代单元测试框架,具有许多有趣的功能,包括嵌套测试,参数化测试,新的扩展API或Java 8支持. 本文展示了JUnit 5的基本概念,包 ...
- Java 的最佳实践
Java 是在世界各地最流行的编程语言之一, 但是看起来没人喜欢使用它.而 Java 事实上还算是一门不错的语言,随着 Java 8 最近的问世,我决定编制一个库,实践和工具的清单,汇集 Java 的 ...
最新文章
- Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
- (Alan Murta)编制的多边形集合运算软件包(general polygon clipping library,简称GPC)
- cdev linux_Linux设备管理(二)_从cdev_add说起
- 2017-10-17 开源非英文关键词编程语言
- 春节特惠活动┃数学无用论??我们欠孩子真正的数学阅读
- [树链剖分]List wants to travel,Relief grain,hotel加强版,This world need more Zhu
- 【转】Linux ln(link) 命令详解
- ci php view,CI映射(加载)数据到view层的方法,ciview_PHP教程
- jenkins组权限_Jenkins 中基于角色的权限管理
- K/3 WISE期初余额调整和出库异常调整的差别
- 编程规范基础学习笔记
- 机器学习笔记 - 探索性数据分析(EDA) 学习进阶
- 跨境电商竞品分析报告
- Apple PUSH Notication Service (APNS) 配置攻略
- Android源码目录结构
- 用css实现朋友圈图片布局
- 怎么去面试测试工程师?
- C++实现骰子涂色算法
- 从GPT-1到GPT-4看ChatGPT的崛起
- 32位汇编语言学习笔记(43)-- 生成随机数