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

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

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

相关文章

怎么修改_论文查重之后怎么修改?

使用知网论文查重以后,发现论文重复率很高,该怎么办?论文查重后怎么改?今天paperfree小编给大家介绍一下。方法一:重写如果论文存在很高的重复率,都是抄袭别人的论文,我们就可以考虑重写。在重写…

java枚举使用详解

package com.ljq.test;/** * 枚举用法详解 * * author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * author jiqinlin * */ public enum ColorEnum { red, green, yellow, blue; }/** * 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静…

js数组再倒数第二个添加元素_归纳JS中数组的使用(一)元素新增和删除

新增元素js中给数组新增元素主要通过2个方法 push 和 unshiftArray.prototype.push功能概述push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度(该方法修改原有数组)。语法arr.push(element1, ..., elementN)关注点新增的元素出现在数组的末尾可以一…

基于谷歌模型gemini-pro 的开发的QT 对话项目

支持的功能,新建对话框,目前发现相关梯子不支持访问谷歌的api 的可能代理设置的不对, QNetworkAccessManager manager;// Set up your requestQNetworkRequest request;request.setUrl(QUrl("https://generativelanguage.googleapis.com…

PS快速将白底图片变为透明图片的解决办法

公司的公章被傻逼老板带到国外去啦,现在还得用公章,就只能拿以前的文件p图啦。 在将白底图片修改为透明图片时,我首先能想到的是简单的利用磁性套索工具选择图片(非常细微的操作),但是一不小心就容易出错&a…

Lucene.net站内搜索—5、搜索引擎第一版实现

目录 Lucene.net站内搜索—1、SEO优化 Lucene.net站内搜索—2、Lucene.Net简介和分词 Lucene.net站内搜索—3、最简单搜索引擎代码Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)Lucene.net站内搜索—5、搜索引擎第…

java ee jms_Java EE6事件:JMS的轻量级替代品

java ee jms我今天要讨论的功能是Java EE 6中的事件机制。一般的想法是触发一个事件,并让事件监听器来接收它。 我创建了这个完全没有用的示例,但是它的简单性帮助我专注于重要的内容。 我将从后备操作中触发LogEvent,该事件将记录到java.uti…

All your files have been encrypted

小弟的姑姑家的老板收银的电脑被黑客黑了,我来解决一下,小孩玩游戏玩电脑中的病毒, 方法很多种,仅供参考。 问题邮件截图: 参考方式: 方法一:给对方钱,一般比较贵,还不如重装系统。哈哈。 方法二:下载解密工具,尝试解密恢复数据, Ransomware File Decrypto Too…

8s yaml 配置生成_接口测试框架实战(六) | 配置的数据驱动

《Python 测试开发实战进阶》课程,4 个月挑战 BAT 大厂年薪 50W Offer,文末加群!在实际工作中,为了便于维护,对于环境的切换和配置,通常不会使用硬编码的形式完成。在之前文章《多环境下的接口测试》中&…

机房合作(一):我怎样做组长(敢于承担责任)

导读:小组合作开始了,不怕死的我,揽下了组长的活儿。然后开始了我的漫漫长征路。不过,不怕猪一样的组长,咱有神一样的组员。机房合作到现在,真的感激组员的配合以及对我这个猪组长的指点。接下来&#xff0…

使用JAXB和Jackson从XSD生成JSON模式

在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 。 在概述从XML Schema创建JSON Schema的方法的同时,本文还演示了JAXB实现的用法(与JDK 9捆绑在一起的xjc版本2.2.12-b150331.1824 [build 1.9.0-ea-b…

成功人士都有的好习惯

人们常问的一个问题是:那些成功的人是如何获得成功的。这个问题的众多答案之一可能就隐藏在他们的日常习惯之中——但这些习惯到底是什么,它们与成功又有什么关系呢? 习惯是指以固定的方式定期进行的实践或行为模式。在这种情况下,意味着成功人士必须采取日常实践,才有可…

有多个python版本_python 多版本共存

有时候需要在同一台机器上安装多个版本的python常见的解决方式如下:一、1. 下载python2.7和python3.7,然后在C盘下新建一个Python文件夹,python2.7安装到 C:\Python\Python27python3.7安装到 C:\Python\Python372. 检查 系统变量中是否有…

Spring Integration完整示例

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来,您将深入研究Spring Integration的基础知识,例如通道,转换器和适…

为什么要创业

在这个时代,成为一名企业家比以往任何时候都要容易,技术正在缩小世界,打开市场,让许多人在他们梦想的领域中独辟蹊径。 然而,许多拥有好点子的人却害怕采取行动。不要让自己成为那些后悔没有创业的人。如果你想掌控你的生活,实现你的梦想。那么你就有无数的理由创业,我…

heroku_简单的Twitter:Heroku上的Play框架,AJAX,CRUD

heroku因此,重大的公告已经发布– Heroku开始为Play Framework应用程序提供本机支持! 如果您还没有听说过,请在Heroku的博客上查看Jesper Joergensen的帖子 。 因此,对于演示,我将建立一个非常基本的Twitter副本&#…

配置环境_JavaJDK环境变量配置

1.Java环境搭建1.1 JDK与JREJDK(Java Development Kit Java开发工具包)JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。其中开发工具:编译工具(javac.exe)打包工具(…

僵固式思维 OR 成长式思维

有意无意中,看到这样的一篇文章,觉得非常富有正能量,而且也比较有同感。而且,不仅仅对于职场暂时失落或者失意的人有帮助,就是对学生,也一样的。故特分享,以共勉之。 我想每个新人进入职场之后都…

Linux常用命令(知道啦就赶紧收藏吧)

作为职业黑客,Linux命令不可不知。赶紧拿起你的小本本。 w-显示目前登入系统的用户信息 ab-Apache服务器的性能测试工具 ip-网络配置工具 ld-将目标文件连接为可执行程序 xz-POSIX 平台开发具有高压缩率的工具。 ln-用来为文件创件连接 ar-建立或修改备存文件,或是从备…

在Spring使用AWS SQS创建消息驱动Bean

在我之前的文章中,我展示了一个简单的示例,该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列中并从队列中读取消息。 在本文中,我将更进一步,并使用Spring创建一个“消息驱动的Bean”,以便对放入队列中…