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接口

mockito接口_什么是Mockito Extra接口?相关推荐

  1. postman调用webservice接口_【分享】关于接口对前后端和测试的意义

    1.什么是接口? 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互. 2.接口都有哪些类型? ...

  2. http接口_基于Python的HTTP接口自动化测试框架实现

    一.测试需求描述 对服务后台一系列的http接口功能测试. 输入:根据接口描述构造不同的参数输入值 输出:XML文件 二.实现方法 1.选用Python脚本来驱动测试 2.采用Excel表格管理测试数 ...

  3. 显示器接口_显示器上的TypeC接口 可能绝大多数人都不知道这么大作用

    大多数的数码爱好者认识Type-C接口,估计都是从2015年的安卓手机开始的. 但估计不少用户不知道的是,电脑端的显示器上也有Type-C接口. 如果你是一个刚入门想买显示器的朋友,下面可以分别看看显 ...

  4. 显示器接口_显示器上的Type-C接口 可能绝大多数人都不知道这么大作用

    [PConline 杂谈]大多数的数码爱好者认识Type-C接口,估计都是从2015年的安卓手机开始的,但估计不少用户不知道的是,电脑端的显示器上也有Type-C接口,如果你是一个刚入门想买显示器的朋 ...

  5. 华为荣耀9显示无服务器,华为荣耀9是什么接口_华为荣耀9充电接口是什么-太平洋IT百科...

    华为荣耀9是什么接口?华为荣耀9充电接口是什么?从华为荣耀9上市以来这也是很多网友们比较关注的问题,接下来详细介绍华为荣耀9是什么接口? 华为荣耀9是什么接口?华为荣耀9充电接口是什么? 华为荣耀9是 ...

  6. kf真空接口_一种测试仪器真空接口转标准kf真空接口的转接头的制作方法

    一种测试仪器真空接口转标准kf真空接口的转接头的制作方法 [专利摘要]本实用新型涉及一种测试仪器真空接口转标准KF真空接口的转接头,包括接头.O型圈.螺钉,接头为不同内.外径的圆柱体,其一端内.外径与 ...

  7. 马逊s3云存储接口_利用 S3tests 测试 S3 接口兼容性

    女主宣言 在对象存储迭代研发.测试过程中,为了方便.准确验证 S3 接口协议兼容性,本文作者对Ceph官方采用的兼容性测试工具s3-tests进行了调研,并对其配置以及使用做出了详细介绍,相信对于s3 ...

  8. 未指定发送trap的源接口_组播之RPF接口检测

    RPF的检测方法: 1.unicast routing table--单播路由表检测 2.multicast route static--组播路由静态检测 3.MBGP(Muiticast Addre ...

  9. 马斯克脑机接口_马斯克的脑机接口,让我倍感担忧

    前段时间,特斯拉创始人马斯克展示了一项研究成果--把芯片装在人脑袋里. 按照他的说法,植入的芯片不仅不会对人脑造成任何伤害,相反的,可以解决很多神经系统问题,比如注意力不集中.上瘾.焦虑等. 不仅如此 ...

最新文章

  1. mysql数据库锁定机制
  2. oracle表空间dbf文件,Oracle 11g表空间dbf文件迁移
  3. Spring boot配置文件值注入
  4. 复盘-电商产品「分类」功能迭代
  5. pycharm pycharm中用matplolib的ax3.plot_surface画出的3D(三维图)(三维函数)不能旋转怎么办?
  6. wxpython菜单栏嵌套窗口_如何在wxpython中使嵌套的Panel和Sizer工作
  7. linux下判断网络是否连接
  8. iphone分屏功能怎么用_你用iPhone手机,没学会这7个功能,难怪会说手机不好用...
  9. ubuntu18.04下hadoop安装与集群配置
  10. python的读音-python怎么读?python的含义和读音!
  11. Java并发包的理解
  12. 软件测试中性能瓶颈是什么,性能测试常见瓶颈分析及调优方法
  13. 51ditu地图频道接口(MapOne API)详细的参数说明表
  14. UNICODE和ANSI以及MBCS的问题
  15. 阿里云与线下IDC对接IPsec虚拟专用网络
  16. 一、【VUE-CLI】Vue CLI 脚手架介绍及安装
  17. 微信自动邀请加群!!!
  18. 连连支付提现人民币的时候汇率是怎么样的?
  19. Imperva之SecureSphere打补丁
  20. Java实现简单的数字雨

热门文章

  1. 【DP】Rotating Substrings(CF1363F)
  2. 【结论】只不过是长的领带(luogu 6877)
  3. 操作系统复习笔记 05 Thread 线程
  4. SpringCloud Consul自定义服务注册
  5. mybatis多个参数(不使用@param注解情况下),sql参数占位符正确写法
  6. 大家都在说的分布式系统到底是什么
  7. Java 内存模型 JMM 详解
  8. 我们在进行着一场拔河比赛……
  9. 在mysql中插入日期
  10. vba mysql update多字段_vba操作Mysql使用UPDATE一次更新多组数据