JUnit:使用Java 8和AssertJ 3.0.0测试异常
Java 8的AssertJ 3.0.0发行版比以前更容易测试异常。 在我以前的一篇博客文章中,我描述了如何利用纯 Java 8实现此目的,但是使用AssertJ 3.0.0可能会删除我创建的许多代码。
警告:此博客文章主要包含代码示例。
SUT –被测系统
我们将测试以下2类抛出的异常。
第一个:
class DummyService {public void someMethod() {throw new RuntimeException("Runtime exception occurred");}public void someOtherMethod(boolean b) {throw new RuntimeException("Runtime exception occurred",new IllegalStateException("Illegal state"));}
}
第二个:
class DummyService2 {public DummyService2() throws Exception {throw new Exception("Constructor exception occurred");}public DummyService2(boolean dummyParam) throws Exception {throw new Exception("Constructor exception occurred");}
}
assertThatThrownBy()示例
注意:为了使以下代码正常工作,需要静态导入org.assertj.core.api.Assertions.assertThatThrownBy
。
@Test
public void verifiesTypeAndMessage() {assertThatThrownBy(new DummyService()::someMethod) .isInstanceOf(RuntimeException.class).hasMessage("Runtime exception occurred").hasNoCause();
}@Test
public void verifiesCauseType() {assertThatThrownBy(() -> new DummyService().someOtherMethod(true)).isInstanceOf(RuntimeException.class).hasMessage("Runtime exception occurred").hasCauseInstanceOf(IllegalStateException.class);
}@Test
public void verifiesCheckedExceptionThrownByDefaultConstructor() {assertThatThrownBy(DummyService2::new).isInstanceOf(Exception.class).hasMessage("Constructor exception occurred");
}@Test
public void verifiesCheckedExceptionThrownConstructor() {assertThatThrownBy(() -> new DummyService2(true)).isInstanceOf(Exception.class).hasMessage("Constructor exception occurred");
}
所提供的断言来自AbstractThrowableAssert
,您可以使用更多的断言!
没有异常抛出!
以下测试将失败,因为不会引发异常:
@Test
public void failsWhenNoExceptionIsThrown() { assertThatThrownBy(() -> System.out.println());
}
消息是:
java.lang.AssertionError: Expecting code to raise a throwable.
AAA风格
如果您希望区分测试的行动阶段和断言阶段以提高可读性,则还可以:
@Test
public void aaaStyle() {// arrangeDummyService dummyService = new DummyService();// actThrowable throwable = catchThrowable(dummyService::someMethod);// assertassertThat(throwable).isNotNull().hasMessage("Runtime exception occurred");
}
参考文献
- GitHub上提供了本文的源代码 (请查看
com.github.kolorobot.assertj.exceptions
包) - AssertJ 3.0.0 for Java 8版本
翻译自: https://www.javacodegeeks.com/2015/04/junit-testing-exceptions-with-java-8-and-assertj-3-0-0.html
JUnit:使用Java 8和AssertJ 3.0.0测试异常相关推荐
- JUnit 4 如何正确测试异常
我们在用 JUnit 测试方法异常的时候,最容易想到的办法就是用 try-catch 去捕获异常,需要断言以下几个条件: 1. 确实抛出的异常 2. 抛出异常的 Class 类型 3. 抛出异常的 ...
- java 拼sql最大长度,java.sql.SQLNonTransientConnectionException: 用户 ID 长度 (0) 超出 1 到 255 的范围...
使用Derby数据库进行JUnit测试时, 报出了org.springframework.transaction.CannotCreateTransactionException: Could not ...
- java junit 异常_JUnit:使用Java 8和Lambda表达式测试异常
java junit 异常 在JUnit中,有许多方法可以在测试代码中测试异常,包括try-catch idiom JUnit @Rule和catch-exception库. 从Java 8开始,我们 ...
- JUnit:使用Java 8和Lambda表达式测试异常
在JUnit中,有许多方法可以在测试代码中测试异常,包括try-catch idiom JUnit @Rule和catch-exception库. 从Java 8开始,我们还有另一种处理异常的方法:使 ...
- 第64节:Java中的Spring Boot 2.0简介笔记
Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...
- Java 近期新闻:Grail 5.0、Spring、Hibernate、WildFly 及 Kotlin Multik 开发库更新
2021 年 10 月 11 日起始周 Java 新闻更新:OpenJDK.JDK 18.Spring Framework.Grails 5.0.Micronaut 3.1.Helidon 2.3.4 ...
- java写抽象类的测试_如何使用JUnit在Java中测试抽象类?
如何使用JUnit在Java中测试抽象类? 我是JUnit的Java测试新手. 我必须使用Java,我想使用单元测试. 我的问题是:我有一个带有一些抽象方法的抽象类. 但是有些方法并不是抽象的. 如何 ...
- java me sdk_Java ME SDK 3.0不运行的问题及解决
Java ME SDK 3.0不运行的问题及解决 最近想实现一个在自己手机上查询汉字拼音的程序,已经进行了大概20天了吧.但是上周的时候在Netbeans 6.8中运行程序,在输出中显示的是" ...
- Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到 17 了吗?
欢迎关注方志朋的博客,回复"666"获面试宝典 文章来源:程序猿DD 2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M ...
最新文章
- 还在加班做数据吗?今天1分钟教你学会用Python轻松玩转Excel
- oracle4045,ORACLE 错误 4045
- 成功解决Runtime Error Selected KDE bandwidth is 0. Cannot estiam
- SAP Leonardo Machine Learning处于deprecated状态的API和其替代者
- linux svn启动和关闭(转)
- npm audit fix
- js基础-7-数组去重的es5和es6写法、数组扁平化
- Java 案例三 随机点名器
- 计算机与科学的论文,计算机与科学技术论文要求.doc
- Python爬取2万条微博热搜,带你揭开热搜趋势!
- 计算机毕业设计springboot+vue+elementUI高校志愿者管理系统(源码+系统+mysql数据库+Lw文档)
- 关于travis scott的网名_小仙女可爱单纯的网名
- 贝壳CVR转化率预估模型实践
- Android APK加固(加壳)工具
- 【经验分享】设置电脑定时开关机
- plc控制柜图纸怎么看呢?
- centos7 安装mysql5.7.37 实操说明
- 6G网络潜在关键技术研究综述
- 中国移动,联通,电信
- LTE数据速率低的原因及优化方法
热门文章
- java知识点总结(二)
- numpy 数组抽取_清晰易懂的Numpy入门教程
- 转】Eclipse编辑Spring配置文件xml时自动提示类class包名
- 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)
- 后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如
- posman mocks_使用Mocks进行需求驱动的软件开发
- spring api层打包_Spring项目的按层打包已过时
- javafx 浏览器_浏览器中的JavaFX
- Java:Speedment 3.2的发布–现在启用轻量级数据库微服务
- apache hadoop_通过Apache Hadoop大规模扩展Apache Solr实时实时索引