mockito接口_什么是Mockito Extra接口?

mockito接口

如果要编写轻量级的JUnit测试, Mockito是我最喜欢的小帮手。 如有必要,可以通过模拟轻松地替换被测单元的“实际”依赖关系,这非常有用。 特别是在处理框架API的边界时,这种依赖关系否则设置起来非常昂贵。

但是有时候情况要复杂一些。 例如,如果测试出于某种原因需要与至少一个属于这种框架的真实实例进行交互。 如果此交互包括将模拟作为参数传递给此实例,那么很幸运,实现会将参数强制转换为从交互器的角度来看未知的类型。


这是一个简单的例子来澄清这一点:

public interface Foo {[...]
}public class Bar {public Bar( Foo foo ) {Runnable runnable = ( Runnable )foo;runnable.run();}[...]
}public class SomeTest {@Testpublic void testConstructor() {Foo fooMock = mock( Foo.class );// fails with ClassCastExceptionBar bar = new Bar( fooMock );[...]}
}

可以将Bar类视为需要某种实现的框架代码。 由于参数类型Foo不能反映这种期望,因此将Foo模拟传递给Bar的构造函数将导致测试失败,并带有ClassCastException

也许您在想到上述情况时首先想到的是,框架通过强制转换为未声明的类型而变得很糟糕,并且最好将所有内容扔掉并重新开始,从而更好!

不幸的是,在现实世界中,这种行为可以说是有效的。 例如, Eclipse平台具有许多被声明为“不打算由客户端实现”的接口。 一个很好的例子是团队API的IHistoryView接口。 可以肯定地使用3.x平台,尽管IHistoryView实现扩展了IViewPart ,但是历史视图界面并未公开这一细节。

在这种情况下,有时可能需要创建多种类型的模拟程序-一种实现IHistoryViewIViewPart的模拟IViewPart -尽管API并未指出所有这些类型。 Mockito通过鲜为人知的MockSettings#extraInterfaces模拟配置功能简化了此过程。 以下代码段显示了如何使用extraInterfaces修复上述示例的测试。

@Test
public void testConstructor() {Foo mock = mock( Foo.class,withSettings().extraInterfaces( Runnable.class ) );// the mock now supports the cast to runnableBar bar = new Bar( mock );[...]
}

使用withSettings的方法调用会创建一个新的MockSettings实例,并使用其他Runnable类型MockSettings进行配置。 生成的Foo模拟实例同时实现FooRunnable 。 现在测试通过了。

但是请记住,尽管在本文中使用额外接口的动机似乎是合理的,但要强调的是,在实际使用此功能之前,您应该三思而后行。 或者如文档所述,“如果您碰巧经常使用它,请确保您确实在编写简单,干净且可读的代码。” 粗心地使用它绝对是一个预定的突破点。

翻译自: https://www.javacodegeeks.com/2014/03/what-are-mockito-extra-interfaces.html

mockito接口

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

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

相关文章

【渝粤教育】国家开放大学2018年春季 7392-22FMatlab语言及其应用 参考试题

科目编号:7392 2017-2018学年度第二学期期末考试 Matlab语言及其应用 试题(式样) 命题人:冯立 审核人: 部门领导: 考核方式 开 卷,考核时间 60 分钟,本题共 2 套,第 2 …

Zigbee 电动智能窗帘系统 解决方案

随着社会经济结构、家庭人口结构以及信息技术的发展变化以及人类对家居环境的安全性、舒适性、效率性要求的提高,造成家居智能化的需求大大增加, 同时越来越多的家庭要求智能家居产品不仅要满足一些基本的需求,更要求智能家居系统在功能扩展、…

工业以太网交换机的专业术语

工业以太网交换机与民用以太网交换机相比,工业以太网交换机产品在设计上以及在元器件的选用上,产品的强度和适用性方面都能满足工业现场的需要。接下来,我们就来为大家详细介绍下工业以太网交换机的一些常用专业术语,一起来看看吧…

【渝粤教育】国家开放大学2018年春季 8039-22T二手车评估 参考试题

科目编号:8039 座位号 2017-2018学年度第二学期期末考试 二手车评估 试题 2018年 7 月 一、不定项选择题(本大题共6小题,每小题5分,共计30分) (★请考生务必将答案填入到下面对应序号的答题框中★&#xf…

oracle utf8 varchar,Oracle中字符集的类型决定varchar2的字符长度

1.前几天往数据库表里面插入数据的报了一个这样的错误如下:SQL> insert into student values(中华人民共和,60);insert into student values(中华人民共和,60)*第 1 行出现错误:ORA-12899: 列 "SYSTEM"."STUDENT"."NAME" 的值太大…

为什么BAT这些大企业都喜欢用LoRa技术?

相信对于很多朋友来说LORA通讯协议还是比较陌生的,因为LORA这种通讯技术是在2016年开始才正式传入中国的。现在阿里、Google、腾讯等互联网巨头都已经加入了LORA联盟,最有意思的是亚马逊,它在今年西雅图举行的硬件大会上,发布了一…

如何在Java中使用QRGen创建QRCode

在我以前的一篇文章中 ,我们了解了如何使用Zxing Java库创建QRCode及其等效的SVG。 Zxing库不再得到积极维护,为此,Zxing库周围有一个名为QRGen的包装,该包装提供了更高级别的API和用于生成QR代码的构建器语法。 在本文中&#x…

【渝粤教育】国家开放大学2018年春季 8625-22T老年心理健康 参考试题

编号:8625 座位号 2017~2018学年度第二学期期末考试 老年心理健康试题 2018年7月 一、名词解释(本大题共6小题,每题5分,共30分) 期待性焦虑 忧郁: 急躁: 暴躁: 心理…

蓝牙的原理,蓝牙耳机怎么连接手机

蓝牙技术是一种无线数据和语音通信的通信协议,它是一种基于低成本的近距离的无线连接,为固定和移动设备监理通信环境的一种近距离无线连接技术。 蓝牙的作用 蓝牙使今天的一些便携式移动设备和计算机是被能够不需要线路就能相互链接,并且可以…

关于工业交换机技术的简单总结

工业交换机,应用于工业控制领域的以太网交换机设备,使用的是透明而统专一的TCP/IP协议,本身与商属业网络在数据链路层、网络层、协议层等方面并无本质区别,接下来飞畅科技的小编来为大家详细介绍下工业交换机技术,感兴…

【渝粤教育】国家开放大学2018年春季 8661-21T传感与检测技术 参考试题

科目编号:8661 座位号 2017-2018学年度第二学期期末考试 传感与检测技术 试题 2018年 7 月 一、单选题(本大题共6小题,每小题4分,共计24分) (★请考生务必将答案填入到下面对应序号的答题框中★&#xff0…

oracle内连接使用,Oracle中的联合查询-自然连接/外连接/内连接

自然连接select *from r1 natural [inner] join r2 natural [inner] join r3where P;select A1,A2from r1natural [inner] joinr2,r3 where r2.Ar3.B;自然连接中,匹配关系(relation,表)中属性(attribute,列)的属性名称相同的所有列&#xff0…

【渝粤教育】国家开放大学2018年秋季 0033-21T工程数学 参考试题

试卷代号:0049 座位号 2018——2019学年度第一学期期末考试 法 律 文 书 试 题 2019年1月 答题框: 下列几项,不属于公安机关制作的法律文书的是_______? A. 起诉意见书 B. 立案决定书 C. 不立…

物联网中的无线通信模块到底是什么

物联网市场的爆发式增长速度,离不开无线通信模块产品的强有力的拉动,无线通信模块也是物联网的核心,但是很多人只知道物联网却对于组成物联网的无线通信模块知之甚少,所以下面就让我们一起来了解一下,物联网中的无线通…

【渝粤教育】国家开放大学2018年秋季 0149-21T现代汉语 参考试题

编号: 0176 2018-2019年度第一学期期末考试 电机学(1) 试 题 2019 年 1 月 一、填空题(每空4分,共40分) 1.已知变压器变比为5,原边电压U1为220V。电流I1为,漏抗X1为0.2…

光纤交换机按照级别可分为3种

我们经常都有听说过光纤交换机和光纤收发器,其中光纤交换机是一种高速的网络传输中继设备,又叫做光纤通道交换机、SAN交换机,它较普通交换机而言,采用了光纤电缆作为传输介质。光纤传输的优点是速度快、抗干扰能力强。光纤交换机主…

基于NB-IOT的智能烟感应用方案

据国家有关部门发布的2018年火灾数据统计,全国共发生火灾23.7万起,造成1407人死亡,伤798人。直接财产损失36.75亿元,其中居民住宅火灾10.7万起,超过全年火灾总数的45%,其原因与我国当前火灾预防基础设施建设…

php static与self,PHP5.3新特性static与self区别

很多人都说,PHP 简单,入门门槛较低,但是要学精通确很难。随着 PHP 不断的发展,新特性不断的增加,同时又得兼容老版本 PHP4 的一写语法特征,初学者在学习 PHP 时,显然就不再那么容易了。特别是 P…

【渝粤教育】国家开放大学2018年秋季 0257-21T高级英语听力(1) 参考试题

试卷代号:0269 2018-2019年度第一学期考试 文学概论试题 2019年1月 一、选择题(请在下面的答题框内写上正确答案的序号)(每小题3分,共30分) 1.在魏晋时期,南朝宋文帝建立“四学”即…

java常见_关于Java的常见误解

java常见Java是世界上使用最广泛的语言(需要引用),每个人对此都有自己的见解。 由于它是主流,所以通常会嘲笑它,有时是对的,但有时批评并没有触及现实。 我将尝试解释我最喜欢的5个关于Java的误解。 Java速…