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相同,但略有不同,即不支持从属断言。

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相关推荐

  1. junit5和junit4_JUnit 5符合AssertJ

    junit5和junit4 JUnit 5在断言库中带来了很多改进,这主要归功于Java 8和Lambda Expression的支持以及新断言(如assertAll , assertTimeout或 ...

  2. junit 5测试异常处理_使用JUnit 5测试异常

    junit 5测试异常处理 JUnit 5带来了令人敬畏的改进,并且与以前的版本有很大不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言 ...

  3. JUnit 5 –基础

    JUnit 5是适用于Java的下一代单元测试框架,具有许多有趣的功能,包括嵌套测试,参数化测试,新的扩展API或Java 8支持. 本文展示了JUnit 5的基本概念,包括测试生命周期,参数注入和断 ...

  4. 使用JUnit 5测试异常

    JUnit 5带来了令人敬畏的改进,它与以前的版本有很大的不同. JUnit 5在运行时需要Java 8,因此Lambda表达式可以在测试中使用,尤其是在断言中. 这些断言之一非常适合测试异常. 设置 ...

  5. Springboot Feature翻译

    shell本节将深入介绍 Spring Boot 的详情,在这里你能了解到你可以会使用或者自定义的关键特性.如果你还没有准备好,你也许需要去阅读 "getting-started.html& ...

  6. 利用Diferencia和Java微服务进行分接比较测试

    本文要点 在微服务体系结构中,许多服务可能同时在(相对)独立地演化,而且通常非常迅速.要获得这种架构风格的全部价值,服务必须能够独立发布. 通常很难验证新服务(或服务的新版本)没有对当前的应用程序造成 ...

  7. java无效的源发行版_无效的Java

    java无效的源发行版 也许我可以被机器人代替进行代码审查. 有一些反馈我发现自己一遍又一遍. 这是我最不喜欢的一些: 通用代码结构 放弃其他 当if在两端return的else是多余的和不必要的创建 ...

  8. junit5和junit4_JUnit 5 –基础

    junit5和junit4 JUnit 5是适用于Java的下一代单元测试框架,具有许多有趣的功能,包括嵌套测试,参数化测试,新的扩展API或Java 8支持. 本文展示了JUnit 5的基本概念,包 ...

  9. Java 的最佳实践

    Java 是在世界各地最流行的编程语言之一, 但是看起来没人喜欢使用它.而 Java 事实上还算是一门不错的语言,随着 Java 8 最近的问世,我决定编制一个库,实践和工具的清单,汇集 Java 的 ...

最新文章

  1. Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
  2. (Alan Murta)编制的多边形集合运算软件包(general polygon clipping library,简称GPC)
  3. cdev linux_Linux设备管理(二)_从cdev_add说起
  4. 2017-10-17 开源非英文关键词编程语言
  5. 春节特惠活动┃数学无用论??我们欠孩子真正的数学阅读
  6. [树链剖分]List wants to travel,Relief grain,hotel加强版,This world need more Zhu
  7. 【转】Linux ln(link) 命令详解
  8. ci php view,CI映射(加载)数据到view层的方法,ciview_PHP教程
  9. jenkins组权限_Jenkins 中基于角色的权限管理
  10. K/3 WISE期初余额调整和出库异常调整的差别
  11. 编程规范基础学习笔记
  12. 机器学习笔记 - 探索性数据分析(EDA) 学习进阶
  13. 跨境电商竞品分析报告
  14. Apple PUSH Notication Service (APNS) 配置攻略
  15. Android源码目录结构
  16. 用css实现朋友圈图片布局
  17. 怎么去面试测试工程师?
  18. C++实现骰子涂色算法
  19. 从GPT-1到GPT-4看ChatGPT的崛起
  20. 32位汇编语言学习笔记(43)-- 生成随机数

热门文章

  1. 头条面试题:请谈谈Redis 9种数据结构以及它们的内部编码实现
  2. 使用cardme读写VCard文件,实现批量导入导出电话簿
  3. java使用htmlparser提取网页纯文本例子
  4. java后台手动分页
  5. python获取当前进程id_从python进程名中获取进程id
  6. 转-Redis AOF 持久化详解
  7. 转:在eclipse中搭建maven工程(第二种方法)
  8. 学习PL/SQL最好的书籍推荐
  9. nutshell_Nutshell中的Java 8语言功能-第1部分
  10. java 换行 运算符格式_Java代码样式运算符换行格式