mockito 静态_在Java 8中使用不带静态导入的Mockito
mockito 静态
如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用。
基本原理
Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常流畅的链接方法调用。 可以使用模拟/间谍/给定/然后/验证静态方法来启动模拟创建,存根和呼叫验证:
@Test
public void shouldVerifyMethodExecution() {//givenTacticalStation tsSpy = BDDMockito.spy(TacticalStation.class);BDDMockito.willDoNothing().given(tsSpy).fireTorpedo(2);//whentsSpy.fireTorpedo(2);tsSpy.fireTorpedo(2);//thenBDDMockito.then(tsSpy).should(BDDMockito.times(2)).fireTorpedo(2);
}
非常详细,但是从Java 5开始,可以使用静态导入来简化代码,但是要付出额外的静态导入的代价:
import static org.mockito.BDDMockito.then;
import static org.mockito.BDDMockito.willDoNothing;
import static org.mockito.BDDMockito.spy;
import static org.mockito.BDDMockito.times;
(...)@Test
public void shouldVerifyMethodExecution() {//givenTacticalStation tsSpy = spy(TacticalStation.class);willDoNothing().given(tsSpy).fireTorpedo(2);//whentsSpy.fireTorpedo(2);tsSpy.fireTorpedo(2);//thenthen(tsSpy).should(times(2)).fireTorpedo(2);
}
导入可以隐藏在IDE中,通常不会造成太大影响。 然而,为了能够只写一个没有类的方法名(例如, mock(TacticalStation.class)
),还是需要按ALT-ENTER(在IntelliJ IDEA中),以在第一次使用给定方法时添加每个静态导入。测试班。 在Eclipse中情况更糟,在Eclipse中, 需要更早地将BDDMockito
添加到“ Content Assist”中的“ Favorites”中,以使其由IDE建议。 Eclipse的人可能会说“您只需做一次”,但是正如我在测试/ TDD培训中所经历的那样,它使Mockito的学习(使用)曲线变得更加陡峭。
当然,有一些技巧,例如默认情况下对Mockito类使用星号导入以减少所需的击键次数,但是如果您在项目中使用Java 8(希望是您的大多数),则有一种更简单的方法来应对它。
静态无进口方式
Mockito-Java8 2.0.0(及其对应的Mockito 1.10.x –版本1.0.0)引入了一组接口,这些接口提供了Mockito API的所有方法。 通过在测试类中“实现”它们,所有这些方法都可以在书面测试中自动直接访问:
//no static imports needed!public class SpaceShipTest implements WithBDDMockito {@Testpublic void shouldVerifyMethodExecution() {//givenTacticalStation tsSpy = spy(TacticalStation.class);willDoNothing().given(tsSpy).fireTorpedo(2);//whentsSpy.fireTorpedo(2);tsSpy.fireTorpedo(2);//thenthen(tsSpy).should(times(2)).fireTorpedo(2);}
}
该代码看起来与上一片段完全相同,但是不需要进行任何静态导入(除了WithBDDMockito本身的常规导入之外)。
在WithBDDMockito
接口实现非常简单。 所有方法都是默认方法,它们仅委托给BDDMockito
类中的适当静态方法。
default <T> BDDMockito.BDDMyOngoingStubbing<T> given(T methodCall) {return BDDMockito.given(methodCall);
}
Mockito的味道
Mockito方法由3个基本接口提供,它们是给定方法集的入口点:
WithBDDMockito
–以BDD样式存根/WithBDDMockito
API(还提供经典API)。WithMockito
–经典的存根/WithMockito
APIWithAdditionalMatchers
–其他Mokcito匹配器(基本帐户包含在With(BDD)Mockito中)
摘要
Java 8为如何以更紧凑和可读的方式编写(测试)代码开辟了新的机遇。 静态导入免费的Mockito代码可以稍微简化编写测试,但是Mockito-Java8中已经提供了更多功能,Mockito 3.0中甚至包含了更多功能(必须以非向后兼容的方式修改Mokcito内部的功能) 。 过多地了解如何重构代码/项目以从Java 8中受益,您可以看到我的简短演示“ Java 8为测试带来了力量!” ( 幻灯片和视频 )。
Mockito-Java8 2.0.0-beta(适用于Mockito> = 2.0.22-beta)和1.0.0-beta(适用于Mockito 1.10.x和Mockito 2的早期beta)可通过Maven Central获得 。 这些版本应该相当稳定,但是我希望获得更多有关此新功能的反馈,因此将其标记为Beta。 可以在项目网页上找到更多详细信息。
致谢 。 这个想法最初是David Gageot( Infinitest的幕后人物)在他的一篇博客文章中提出的 。
翻译自: https://www.javacodegeeks.com/2015/12/using-mockito-without-static-imports-java-8.html
mockito 静态
mockito 静态_在Java 8中使用不带静态导入的Mockito相关推荐
- 在Java 8中使用不带静态导入的Mockito
如何通过在基于Java 8的项目中删除静态导入来简化Mockito的使用. 基本原理 Mockito API基于(BDD)Mockito类中聚集的静态方法(大部分),然后进行非常流畅的链接方法调用. ...
- java 应用分模块_在Java 11中创建一个简单的模块化应用教程
模块化编程使人们能够将代码组织成独立的,有凝聚力的模块,这些模块可以组合在一起以实现所需的功能. 本文摘自Nick Samoylov和Mohamed Sanaulla撰写的一本名为Java 11 Co ...
- java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解
参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...
- java定义常量语法错误的是_在Java接口中定义常量,下面语法错误的是( )_学小易找答案...
[单选题]Why did Ben's emotions change so much? [判断题]Write the title in the middle of the first line. [单 ...
- java classpath 目录_关于JAVA项目中CLASSPATH路径详解
在dos下编译java程序,就要用到classpath这个概念,尤其是在没有设置环境变量的时候.classpath就是存放.class等编译后文件的路径. javac:如果当前你要编译的java文件中 ...
- Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法
public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...
- java treeset 删除_删除Java TreeSet中的最高元素
要删除最高元素,请使用pollLast()方法. 创建一个TreeSet并向其中添加元素-TreeSet tSet = new TreeSet(); tSet.add("78"); ...
- java中打开文件显示_从java程序中打开任何文件
在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...
- java下列语句正确的是_下列Java语句中,不正确的一项是( )。
[多选题]装卸搬运机械具有( )功能 [判断题]char[] str="abcdefgh"; ( ) [单选题]7.关于内部类,下列说法不正确的是( ). [单选题]下列关于Jav ...
最新文章
- Winform中使用NPOI实现Excel导入并赋值给DataTable
- Cpp 对象模型探索 / 程序转化语义
- Unity TA总监王靖:Unity如何实现美术画质升级?
- mysql批量修改字段字符集_MySQL字符集修改实战教程
- PHP 直接在共享内存中存储数据集
- “围棋人机大战”唯一人类的胜利记录将被制作成NFT进行拍卖
- python的scrapy爬虫模块间进行传参_Python爬虫Scrapy框架之请求传参合日志等级
- 这一刻只想好好做个平凡的人
- 2016版excel_巧用这些Excel大神技巧,半小时做完一天工作,办公室女神惊呆了!...
- ArcGIS教程 - 1 绪论
- hook read_chk 导致dex2oat进程 abort
- 单片机无线通信学习笔记
- 强大便携的多标签文件管理器 XYplorer Pro 21.60 中文版
- 23行代码下载逆水寒壁纸图片
- 7-95 深入虎穴 (树的深搜)
- AngularJs错误
- 洛谷 CF7E Defining Macros 题解
- 流利说硅谷AI Lab负责人刘扬:语言学习产品如何在技术上保持优势?
- VMware(威睿)后端开发笔试题总结
- LeetCode1621:顺时针打印矩阵
热门文章
- 内部设计师揭秘!王者峡谷中竟有隐藏的c++代码??!!腾讯已经炸了!!!
- CF1137F-Matches Are Not a Child‘s Play【LCT】
- P4296-[AHOI2007]密码箱【数论】
- P3651-展翅翱翔之时【贪心,环套树】
- 【图论】【Kosaraju】刻录光盘(ssl 2344)
- [XSY] 绿色(圆方树、树形DP、树上差分)
- SpringBoot使用日志
- 漫画:什么是鸡尾酒排序
- baiduTemplate / artTemplate
- Java并发包:ConcurrentMap