预期的异常规则和模拟静态方法– JUnit

今天,我被要求使用RESTful服务,所以我开始遵循Robert Cecil Martin的TDD规则实施该服务,并遇到了一种测试预期异常以及错误消息的新方法(对我来说至少是这样),因此考虑共享我的实现方式作为这篇文章的一部分。

首先,让我们编写一个@Test并指定规则,我们的代码将为我们的示例抛出特定的异常,即EmployeeServiceException ,我们将使用ExpectedException对其进行验证,这将为我们提供有关预期抛出的异常的更精确信息,并具有验证的能力错误消息,如下所示:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStaticMethod.class)
public class EmployeeServiceImplTest {@InjectMocksprivate EmployeeServiceImpl employeeServiceImpl;@Rulepublic ExpectedException expectedException = ExpectedException.none();@Beforepublic void setupMock() {MockitoAnnotations.initMocks(this);}@Testpublic void addEmployeeForNull() throws EmployeeServiceException {expectedException.expect(EmployeeServiceException.class);expectedException.expectMessage("Invalid Request");employeeServiceImpl.addEmployee(null);}}

现在,我们将为@Test创建一个实现类,该类将在请求为null时抛出EmployeeServiceException ,对我来说,它是EmployeeServiceImpl ,如下所示:

EmployeeServiceImpl.java

public class EmployeeServiceImpl implements IEmployeeService {@Overridepublic String addEmployee(final Request request)throws EmployeeServiceException {if (request == null) {throw new EmployeeServiceException("Invalid Request");}return null;}
}

下一步,我们将写一个@Test,我们将使用嘲笑其接受输入参数,返回类型的静态方法PowerMockito.mockStatic() ,验证它使用PowerMockito.verifyStatic(),最后做一个断言来记录测试通过或失败状态,如下:

@Testpublic void addEmployee() throws EmployeeServiceException {PowerMockito.mockStatic(ClassWithStaticMethod.class);PowerMockito.when(ClassWithStaticMethod.getDetails(anyString())).thenAnswer(new Answer<String>() {@Overridepublic String answer(InvocationOnMock invocation)throws Throwable {Object[] args = invocation.getArguments();return (String) args[0];}});final String response = employeeServiceImpl.addEmployee(new Request("Arpit"));PowerMockito.verifyStatic();assertThat(response, is("Arpit"));}

现在,我们将在EmployeeServiceImpl自身中提供@Test的实现。 为此,让我们修改EmployeeServiceImpl使其具有静态方法调用,作为addEmployee的else语句的一部分 ,如下所示:

public class EmployeeServiceImpl implements IEmployeeService {@Overridepublic String addEmployee(final Request request)throws EmployeeServiceException {if (request == null) {throw new EmployeeServiceException("Invalid Request");} else {return ClassWithStaticMethod.getDetails(request.getName());}}
}

其中getDetailsClassWithStaticMethod内部的静态方法:

public class ClassWithStaticMethod {public static String getDetails(String name) {return name;}
}

完整的源代码托管在github上 。

翻译自: https://www.javacodegeeks.com/2017/01/expected-exception-rule-mocking-static-methods-junit.html

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

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

相关文章

Linux安装部署FTP服务器

Linux安装部署FTP服务器 本文章会将安装FTP服务器的步骤以及一些遇到的问题来记录下 因为项目中要与第三方对接数据&#xff0c;需要用到FTP服务器以提供他们每天上传数据&#xff0c;因为之前在本地的VMware虚拟机上部署过一次&#xff0c;这次则在天翼云上部署。 首先&#x…

广度优先搜索

转载 https://www.cnblogs.com/skywang12345/p/3711483.html 1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search)&#xff0c;又称为"宽度优先搜索"或"横向优先搜索"&#xff0c;简称BFS。 它的思想是&#xff1a;从图中某顶点v出发&#xff…

转https_免费!这个PPT转PDF的方法不学可惜!

职场人士对PPT演示文档都不陌生&#xff0c;尤其是商务、营销团队利用PPT向客户推荐产品、推广计划更是家常便饭。但是作为一个合格的商务营销人员&#xff0c;汇报、方案只保存PPT一种格式是远远不够的&#xff0c;因为经常在不同产地演示&#xff0c;而不同的设备可能对不同版…

深度优先搜索

转载&#xff1a;https://www.cnblogs.com/skywang12345/p/3711483.html 深度优先搜索 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search)&#xff0c;和树的先序遍历比较类似。 它的思想&#xff1a;假设初始状态是图中所有顶点均未被访问&#xff0c;则从某个顶点…

jvm类加载机制和类加载器_在JVM之下–类加载器

jvm类加载机制和类加载器在许多开发人员中&#xff0c;类加载器是Java语言的底层&#xff0c;并且经常被忽略。 在ZeroTurnaround上 &#xff0c;我们的开发人员必须生活&#xff0c;呼吸&#xff0c;饮食&#xff0c;喝酒&#xff0c;并且几乎与类加载器保持亲密关系&#xff…

光源时间_您的国美备战时间已不足一个月!绝密国美考点、考场、光源分析送上!...

中国美术学院2020年本科招生考试报名公告&#xff0c;终于在前几天公布了&#xff01;今年国美一共设置了三个考点&#xff0c;报名也已经正式开启啦&#xff01;考点设置杭州考点&#xff1a;不设报考人数上限&#xff0c;接受全国所有省份考生报考(含广东省、河南省)深圳考点…

ltp-ddt eth_iperf_tcp iperf dualtest遇到的问题

ltp-ddt eth_iperf_tcp server端&#xff1a;iperf -s -i 5 -w 1M client端将ddt的核心代码抠出来&#xff1a; iperf -c 1921.68.40.41 -m -M 1500 -f M -d -t 60 -w 8K 手动运行三次后&#xff0c;server端挂了&#xff0c;client端报错&#xff1a;connect failed: Connecti…

beam search算法

转载 https://blog.csdn.net/xyz1584172808/article/details/89220906 https://blog.csdn.net/batuwuhanpei/article/details/64162331 https://www.zhihu.com/question/54356960 beam search算法 在看论文Sequence to Sequence Learning with neural networks时看到了beam …

微信支付遇到的坑--签名错误

遇到签名错误&#xff0c;因为微信没有给出具体错误信息&#xff0c;所以我们只能自己排查。 下面是我整理出可能导致签名错误的情况&#xff1a; 1.可以先去微信公众平台用支付接口调试工具验证签名方法是否有问题 https://pay.weixin.qq.com/wiki/tools/signverify/2.如果签名…

Apache Kafka / Spark流系统的性能调优

电信行业的实际案例研究 调试实际的分布式应用程序可能是一项艰巨的任务。 至少在一开始&#xff0c;最常见的Google搜索并没有什么用。 在这篇博客文章中&#xff0c;我将详细介绍如何将Apache Kafka / Spark Streaming / Apache Ignite应用程序加速近十倍&#xff0c;并将开…

mysql 8服务配置文件my.ini 不生效_2、mysql的启动选项和配置文件介绍

mysql服务端可以指定允许同时接入的客户端数量max-connections、客户端与服务器的通信方式、表的默认存储引擎default_storage_engine等等设置项&#xff0c;使得我们可以更加灵活地使用它。进入正题我们讲的是基于linux系统的&#xff0c;本文我们主要讲一下&#xff1a;1、有…

数学中常见的maxmin,min max

数学中常见的maxmin&#xff0c;min max 1、数学中公式(1)与公式(2)含义是不同的 (1) (2) 公式(1)的直接理解&#xff0c;先找出每个班里的身高最高的同学&#xff0c;再由这些同学中挑出身高最低的&#xff1b;同理&#xff0c;公式(2)的直接理解&#xff0c;先找出每个…

Mac入门--Apache/Php/Mysql的开启关闭

注意&#xff1a;mac自带apache环境和PHP环境 一 php服务的启动和关闭 php-fpm 启动 sudo php-fpm php-fpm 关闭 1 查看php-fpm端口是否在被php-fpm进程 netstat -an | grep 9000 查看进程pid sudo lsof -i:9000 杀死进程 sudo kill -9 [pid] 或者 sudo killall php-fpm 2 查看…

method=post 怎么让查看源代码看不到_网上文档无法复制怎么办?试试这几个方法!...

从网上复制资料很简单吗&#xff1f;平常在网上查找资料的时候&#xff0c;总是会有一些文档无法下载、甚至有时连复制都不行。这可怎么办&#xff1f;别急&#xff0c;今天我们就来介绍一些网页复制的方法&#xff0c;帮助大家更好地收集资料。一&#xff1a;复制到Word剪贴板…

python 加载mat文件

python 加载mat文件 直接上程序 import scipy.io as sciomat_path ./USPS_vs_MNIST.matload_mat scio.loadmat(mat_path) # load_mat为字典类型, <class dict> print(type(load_mat)) # 访问load_mat即为访问字典 X_src load_mat[X_src] # 这个X_src为numpy类型&…

[Sdoi2010] 地精部落

F. 地精部落 题目描述 传说很久以前&#xff0c;大地上居住着一种神秘的生物&#xff1a;地精。 地精喜欢住在连绵不绝的山脉中。具体地说&#xff0c;一座长度为 N 的山脉 H可分 为从左到右的 N 段&#xff0c;每段有一个独一无二的高度 Hi&#xff0c;其中Hi是1到N 之间的正 …

怎么判断冠词用a还是an_英文写作常见错误学习笔记 | 冠词

写在前面的话在知乎中看到“英文学术论文写作&#xff0c;有什么好书可以推荐”话题中有人推荐了香港大学出版社Steve Hart写的《English Exposed》一书&#xff0c;从副标题“Common Mistakes Made by Chinese Speakers”可以看出书是针对中国人常犯的错误而写的&#xff0c;作…

工厂模式 构建者模式_实践中的构建者模式

工厂模式 构建者模式我将不深入讨论该模式&#xff0c;因为已经有大量的文章和书籍对此进行了详细的解释。 相反&#xff0c;我将告诉您为什么以及何时应该考虑使用它。 但是&#xff0c;值得一提的是&#xff0c;这种模式与《 四人帮》一书中介绍的模式有些不同。 虽然原始模式…

python 反复访问迭代器iter,反复使用next

python 反复访问迭代器iter&#xff0c;反复使用next test [1, 2, 3]# 定义迭代器 iter_test iter(test)# 使用for循环访问迭代器 # 由于next()只向前走&#xff0c;所以当跌代到test最后一个值3之后&#xff0c;就会爆发异常StopIteration # 这里使用了一个try语句&#xf…

PPT转PDF方法

引用&#xff1a; using Microsoft.Office.Interop.PowerPoint;方法&#xff1a; ///<summary> /// PPT转PDF ///</summary> ///<param name"sourcePath">源文件路径</param> ///<param name"targetPath&qu…