模拟决赛

前言

如果您已经阅读了其他有关异常模拟的博客文章,则可以通过此链接跳过前奏 。

我被要求汇总一些示例,这些示例如何模拟因其可测试性问题而众所周知的Java结构:

  • 模拟私人方法
  • 模拟最终方法
  • 模拟决赛
  • 模拟构造器
  • 模拟静态方法

我称这些技术为异常嘲笑。 我担心没有任何指导的此类示例会被在模拟框架方面没有丰富经验的队友广泛使用。

练习TDD或BDD的开发人员应意识到这些构造背后的可测试性问题,并在设计测试和模块时尽量避免它们。 这就是为什么您可能不会使用这些出色的编程方法在项目上经常遇到如此异常的模拟的原因。

但是有时您必须扩展或维护通常包含低内聚性类的旧代码库。 在大多数情况下,当前的忙碌敏捷世界没有时间使此类易于进行单元测试的标准方式。 当您尝试对此类进行单元测试时,您常常会意识到需要进行异常模拟。

这就是为什么我决定创建并共享重构注意事项以及异常模拟的示例和变通办法。 示例包括使用Mockito和PowerMock模拟框架以及TestNG单元测试框架。

模拟决赛

重构注意事项

将类更改为非最终类(删除final关键字)并以标准方式对其进行测试。 这是我可以更改最终课程代码时始终使用的技术。

PowerMock的用法

在使用本示例之前,请仔细考虑是否值得在您的项目中带来字节码操作风险。 他们收集在此博客文章中 。 我认为,仅应在非常罕见且不可避免的情况下使用它。

测试显示了如何通过PowerMock框架模拟最终类。 示例涵盖:

  1. 在最终类中模拟具有返回值的方法
  2. 在最终课程中模拟最终void方法
  3. 验证最终类中的方法调用

期末课程:

public final class Plane {public static final int ENGINE_ID_RIGHT = 2;public static final int ENGINE_ID_LEFT = 1;public boolean verifyAllSystems() {throw new UnsupportedOperationException("Fail if not mocked!");}public void startEngine(int engineId) {throw new UnsupportedOperationException("Fail if not mocked! [engineId=" + engineId + "]");}
}

被测课程:

public class Pilot {private Plane plane;public Pilot(Plane plane) {this.plane = plane;}public boolean readyForFlight() {plane.startEngine(Plane.ENGINE_ID_LEFT);plane.startEngine(Plane.ENGINE_ID_RIGHT);return plane.verifyAllSystems();}
}

测试:

@PrepareForTest(Plane.class)
public class PilotTest extends PowerMockTestCase {@Testpublic void testReadyForFlight() {Plane planeMock = PowerMockito.mock(Plane.class);Pilot pilot = new Pilot(planeMock);Mockito.when(planeMock.verifyAllSystems()).thenReturn(true);// testing methodboolean actualStatus = pilot.readyForFlight();Assert.assertEquals(actualStatus, true);Mockito.verify(planeMock).startEngine(Plane.ENGINE_ID_LEFT);Mockito.verify(planeMock).startEngine(Plane.ENGINE_ID_RIGHT);}
}

链接

  • 可以从Github下载源代码。

其他不寻常的模拟示例:

  • 模拟私人方法
  • 模拟最终方法
  • 模拟构造器
  • 模拟静态方法

参考:在我们的JCG合作伙伴 Lubos Krnac的模拟决赛课程中 ,网址为http://lkrnac.net/博客。

翻译自: https://www.javacodegeeks.com/2014/02/mock-final-class.html

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

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

相关文章

windows无法确定此计算机是否包含,服务器用U盘虚拟光驱装系统,有做RAID5,加载RAID驱动成功后,安装到最后会报“windows无法确定此计算机是否包含有效系统卷”错误...

http://zhidao.baidu.com/link?urlbC5dyBz_W05bgeQOu0hF7BN7As_GjloE-Z8SeJBj8UWXZNt4eHeisP2Eo59nUwud23p3DJMXBPFAXRh_fvXWEq服务器用U盘虚拟光驱装系统,有做RAID5,加载RAID驱动成功后,安装到最后会报“windows无法确定此计算机是否包含有…

fpga运算服务器_一张图了解CPU、GPU、ASIC、FPGA性能、功耗效率、灵活性

​CPU:中央处理器(Central Processing Unit,CPU):通用芯片,主要生产厂家如intel、AMD等,用于PC、服务器等领域。CPU作为通用芯片,可以用来做很多事情,灵活性最高&#xf…

[渝粤教育] 西南科技大学 复习资料 法理学

复习资料——法理学 一、单选题 1.某市政府为缓解拥堵,经充分征求广大市民意见,做出车辆限号行驶的规定。但同时明确,接送高考考生、急病送医等特殊情况,未按号行驶的,可不予处罚。关于该免责规定体现的立法基本原则,下列哪一选项是正确的? A.实事求是,从实际出发 B.民主立法 …

全国计算机二级考试试题和答案,全国计算机二级考试试题及答案解析

1.在“选项”对话框的“文件位置”选项卡中可以设置______。A、表单的默认大小B、默认目录 *C、日期和时间的显示格式D、程序代码的颜色2.设有图书管理数据库:图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))读者(借书证号C(4),单位C(8),…

J2CL –迟到总比不到好

上周,Google团队终于发布了J2CL框架的源代码,自2015年以来就对此进行了讨论。将Java转换为JavaScript的想法根本不是什么新鲜事,而且每个人在使用Google Web Toolkit之前都遇到了麻烦该产品在社区中倍受关注-经过讨论并成为会议演讲的主题&am…

[渝粤教育] 西南科技大学 工程测量 在线考试复习资料

工程测量——在线考试复习资料 一、单选题 1.属于沉降观测的特点是()。 A.一次性 B.周期性 C.随机性 D.无规律性 2.系统误差产生的原因是由于()。 A.观测误差 B.环境影响、仪器不完善 C.人为 D.偶然误差 3.竖直角的最大值为()。 A.90 B.180 C.270 D.360 4.某直线的坐标方位角…

aspen变压吸附塔_空压机科普:吸附式干燥机的结构和原理

精彩内容本文以主流的“变压吸附式”干燥机为例进行讲解。“吸附”原理一致,“脱附再生”流程有所区别。从而大致形成以下几种常见类型:●无热吸附式——使用一部分经过干燥后的压缩空气,经降压后吹扫吸附剂,实现吸附剂“再生”&a…

小学计算机管理,小学计算机室管理制度

小学计算机室管理制度 (2页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分芹菜小学计算机室制度1、计算机室由上电脑课老师负责管理。2、计算机室是进行电脑技术学习和操作的场所&#xff…

[渝粤教育] 西南科技大学 建筑工程定额与预算 在线考试复习资料2021版(2)

建筑工程定额与预算——在线考试复习资料2021版 一、单选题 1.根据《房屋建筑与装饰工程工程量计算规范》(GB50854–2013),关于抹灰工程量说法正确的是( )。 A.墙面抹灰工程量应扣除墙与构件交接处面积 B.有墙裙的内墙抹灰按主墙间净长乘以墙裙顶至天棚底高度以面积计算 …

异形3×3魔方还原教程_【初级篇】(四)最简单的三阶魔方入门教程——中层还原...

本系列教程适合刚刚接触魔方,又比较有好奇心,是为渴望学会还原魔方,又不想死记公式的人准备的。全部教程只使用三种公式,还原过程以理解为主,公式为辅。第四部分 中层棱块还原4.1 预览中层棱块还原后的效果中层还原以后…

[渝粤教育] 西南科技大学 房屋建筑学 在线考试复习资料(1)

房屋建筑学——在线考试复习资料 一、单选题 1. 一部楼梯由( )组成。 A.楼段、平台、扶手 B.踏步、栏杆、扶手 C.踏步、平台、扶手 D.楼段、栏杆、扶手 2.( )不是涂料地面的特点。 A.施工方便 B.耐磨性差 C.造价高 …

吞吐量-Corda的故事

我最近开展了一个针对特定用例的Corda性能项目。 这个项目的结果使我们在170多个节点的网络上一天之内处理了1.15亿个请求。 此外,Corda每秒能够处理6300个请求,确认满足了网络的最高要求。 迄今为止,这是迄今为止已部署的最大的Corda网络&am…

计算机联锁系统组成及工作原理,计算机联锁系统的组成

计算机联锁系统由控制台 电务维护台 联锁机 输出输入接口 微机检测和电源组成。控制台由控显双机和车站值班员办理行车作业的的操作和表示设备组成。每台控显机内安装两个采用光缆连接的串行通信接口板INIO卡,用于同联锁机的2重系通信。控显双机互为备用&#xff0c…

[渝粤教育] 西南科技大学 数据库应用 在线考试复习资料(3)

数据库应用——在线考试复习资料 一、单选题 1.“表达式生成器”是用来书写什么的? A.代码 B.程序 C.表达式 D.数据库 2.在使用计算控件时,每个表示式前必须加上哪种运算符号? A. B. C.? D.* 3.以下属于非绑定控件的是哪一个? A.文本框 B.单选按钮 C.组合框 D.直线控件 …

httpurlconnect设置中文参数_数控三菱CNC机床参数的设置及报警解除!

数控三菱CNC的硬件连接检查与设置执行完毕向系统送电后,显示器上的READY绿灯仍然不亮。而且在〔诊断〕――〔报警〕 画面上显示很多报警内容,哪些是开机时必须设置的呢?又如何解除故障报警呢?1.开机参数1.1 基本参数的设置原装系统…

[渝粤教育] 西南科技大学 机械专业外语 在线考试复习资料2021版

机械专业外语——在线考试复习资料2021版 一、单选题 1.( )improved the performance and enhanced the capabilities of both people and machines within specialized manufacturing components. A.Manual B.Mechanization C.Integration D.utomation 答案:看左边查询 2.FM…

计算机如何更新苹果系统,苹果系统怎么更新_苹果电脑mac如何更新升级系统-win7之家...

苹果电脑跟windows系统一样,也是会在发布之后不断的推送新版本让用户们进行升级,不仅可以修复bug还可以增加新功能,不过很多用户可能都会有一个疑问,就是苹果系统怎么更新呢?方法并不难,本文给大家讲述一下…

[渝粤教育] 西南科技大学 汉语写作 在线考试复习资料

汉语写作——在线考试复习资料 一、单选题 1.在消息写作中,按照新闻事实重要性递减为序进行材料安排的结构方式是( )。 A.倒金字塔结构 B.金字塔结构 C.自由式结构 D.提要式结构 2.在叙述中心事件的过程中,中断原来的叙述,插入另一与中心事件有关的事件的叙述方式属于( )。 A.…

手术步骤_近视飞秒激光手术和传统Lasik手术比较

传统LasikLASIK手术操作时分为两个步骤:第一个步骤医生需要制作一个角膜瓣;第二个步骤是掀开角膜瓣,以准分子激光雕琢角膜,进行视力矫正,雕琢完毕后将角膜瓣复位即手术完成。传统的角膜制瓣是用机械式的设备与一个微型…

[渝粤教育] 西南科技大学 理论力学 在线考试复习资料

理论力学——在线考试复习资料 一、单选题 1.已知W100kN,P80kN,摩擦系数f0.2,物块将( )。 A.向上运动 B.向下运动 C.静止不动 2.已知、、、为作用刚体上的平面共点力系,其力矢关系如图所示为平行四边形,因此可知( )。 A.力系可合成为一个力偶 B.力系可合成为一个力 C.力系简…