mockito_Mockito 101

mockito

Mockito是一个模拟框架,可让您使用简洁的API编写漂亮的测试。 它偏向于最小的规格,使不同的行为看起来有所不同,并显示清晰的错误消息。

创造嘲弄

要使用Mockito创建模拟,只需使用@Mock注释模拟,然后调用MockitoAnnotations.initMocks(this)

import org.mockito.Mock;
import org.mockito.MockitoAnnotations;public class FooClassTest {@Mock mockFoo;public void setUp() {MockitoAnnotations.initMocks(this);...}...
}

存根值

存根值可以刺激现有代码的行为,或暂时替代尚待开发的代码。 默认情况下,对于所有返回值的方法,mock返回null,空集合或适当的原始/原始包装器值(例如:0,false等)。 您可以按以下方式覆盖存根值。 一旦存根,该方法将始终返回存根值,而不管其被调用了多少次。 对于具有无效返回值的方法,通常不需要将其存根。

import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.when;
...
// a method that returns values
when(mockFoo.someCall()).thenReturn(someValue);
when(mockFoo.someCall()).thenThrow(new FooException());
// a method with a void return
doThrow(new FooException()).when(mockFoo).voidMethodThatThrows();

验证方法是否被调用

// call the subject under test
verify(mockFoo, times(2)).someCall();
verify(mockFoo).someCall();
verify(mockFoo).callWithVoidReturnType();

“粗略”和“验证”有什么区别? 简而言之,对于您并不真正关心的项目,应使用“存根”,但它们必须通过测试。 相反,应使用“验证”来验证行为。

验证单个对象的调用顺序

InOrder order1 = Mockito.inOrder(mockFoo);
order1.verify(mockFoo).firstCall();
order1.verify(mockFoo).thirdCall();InOrder order2 = Mockito.inOrder(mockFoo);
order2.verify(mockFoo).secondCall();
order2.verify(mockFoo).fifthCall();

验证跨多个对象的调用顺序

Foo mockFoo = Mockito.mock(Foo.class);
Bar mockBar = Mockito.mock(Bar.class);// call the subject under test
InOrder order = Mockito.inOrder(mockFoo, mockBar)
order.verify(mockFoo).firstCall();
order.verify(mockBar).secondCall();

验证仅进行了预期的呼叫

通常,没有更多交互的测试应该很少。

// call the subject under test
verify(mockFoo).expectedCall();
verify(mockFoo).someOtherExpectedCall();
verifyNoMoreInteractions(mockFoo);

验证未拨打特定电话

测试未发出特定呼叫通常比检查“无更多呼叫”更好。

// call the subject under test
verify(mockStream, never()).close();

匹配器

==equals不能用于存根或验证时,可以将匹配器用于模拟方法参数。 如果发现需要复杂的匹配器,请考虑简化测试对象或测试对象,或者考虑使用手工制作的假冒代替模拟。

import static org.mockito.Mockito.*;// Both of these forms use "equals"
when(mockFoo.set("blah", 2)).thenReturn(value);
when(mockFoo.set(eq("blah"), eq(2))).thenReturn(value);when(mockFoo.set(contains("la"), eq(2))).thenReturn(value);
when(mockFoo.set(eq("blah"), anyInt())).thenReturn(value);
when(mockFoo.set(anyObject(), eq(2))).thenReturn(value);
when(mockFoo.set(isA(String.class), eq(2))).thenReturn(value);
when(mockFoo.set(same(expected), eq(2))).thenReturn(value);ArgumentCaptor<String> sArg = ArgumentCaptor.forClass(String.class);
when(mockFoo.set(sArg.capture(), eq(2))).thenReturn(value);
...
// returns last captured value
String capturedString = sArg.getValue(); 
List<String> capturedStrings = sArg.getAllValues();

部分嘲弄

使用spyCALLS_REAL_METHODS ,您可能希望使用不调用现有方法或存根的备用存根语法: doReturn("The spy has control.").when(mockFoo).aMethod()

import org.mockito.Mockito;Foo mockFoo = Mockito.spy(new Foo()); // Note: instance, not class.
// Note: "when" calls the real method, see tip below.
when(mockFoo.aMethod()).thenReturn("The spy has control.");
// call the subject under test
verify(mockFoo).aMethod();
// Verify a call to a real method was made.
verify(mockFoo).someRealMethod();
// Alternative construct, that will fail if an unstubbed abstract 
// method is called.
Foo mockFoo = Mockito.mock(Foo.class, Mockito.CALLS_REAL_METHODS);

翻译自: https://www.javacodegeeks.com/2014/09/mockito-101.html

mockito

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

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

相关文章

csgo显示服务器失败,csgo服务器失败

csgo服务器失败 内容精选换一换您可以通过“应用管理”页面的应用列表&#xff0c;快速查看应用状态&#xff0c;及相关异常信息&#xff0c;如图1所示。包括&#xff1a;应用状态&#xff1a;即图1中的①应用异常信息&#xff1a;即图1中的②云服务器异常信息&#xff1a;即图…

mysql多表成绩查询_MySQL多表数据记录查询(一)

1&#xff0e;交叉连接SQL语句的语法结构如下&#xff1a;select * from表1 cross join 表2;或Select * from表1&#xff0c;表2;2.内连接SQL语句有两种表示形式&#xff1a;使用inner join 语法结构如下&#xff1a;Select表达式1&#xff0c;表达式2&#xff0c;...&#xff…

DMN中的函数式编程:感觉就像再次重读我的大学课程一样

在本文中&#xff0c;我想分享有关DMN中的递归支持的有趣见解&#xff0c;并重点介绍FEEL语言的特定属性如何使功能编程结构能够在DMN中建模。 我们将从一个基本的示例开始&#xff0c;以演示FEEL语言和DMN构造的“商业友好”性质如何使我们能够解决一个通常不愉快的问题&…

手游极品飞车无限狂飙链接服务器失败,极品飞车无极限无法联网是什么原因 联网失败原因分析及解决方法...

有些玩家对于极品飞车无极限游戏中无法联网的问题而困扰&#xff0c;应该怎么解决呢&#xff1f;下面42824小小编就把方法分享给大家&#xff01;一、极品飞车无极限游戏无法联网原因及解决方法1、网络连接不稳定推荐在wifi的情况下进行游戏&#xff0c;如果是3G网的话很容易会…

mysql索引命名规范_mysql使用规范-索引规范

(1)单张表中索引数量不超过5个。(2)单个索引中的字段数不超过5个。(3)索引名必须全部使用小写。(4)非唯一索引按照“idx_字段名称[_字段名称]”进用行命名。例如idx_age_name。(5)唯一索引按照“uniq_字段名称[_字段名称]”进用行命名。例如uniq_age_name。(6)组合索引建议包含…

junit规则_jUnit:规则

junit规则规则在测试&#xff0c;测试用例或测试套件周围增加了特殊处理。 他们可以对该类中的所有测试执行通用的其他验证&#xff0c;并发运行多个测试实例&#xff0c;在每个测试或测试用例之前设置资源&#xff0c;然后在之后拆除它们。 该规则可以完全控制将要应用到的测…

mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么

mysql中唯一索引的关键字是unique index。创建唯一索引可以避免数据出现重复。唯一索引可以有多个&#xff0c;但索引列的值必须唯一&#xff0c;索引列的值允许有空值。创建唯一索引可以使用关键字UNIQUE随表一同创建。mysql中唯一索引的关键字是unique index。(推荐教程&…

奇迹觉醒qq服务器比微信少,十年内最大的奇迹!功能比QQ还少的微信为什么能成功?...

今天&#xff0c;微信迎来了自己2021年的第一次「翻车」——2021年1月18日下午2点前后&#xff0c;「由于系统抖动原因」部分微信用户无法及时收取微信消息。截止下午3点19分&#xff0c;故障已被修复。其实微信曾面临过几次信息服务中断的事故&#xff1a;2013年&#xff0c;微…

从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存

问题&#xff1a; 启用了Spring且将范围设置为Request的缓存需要由不在请求范围内的singleton bean访问。 解&#xff1a; Spring使您能够创建缓存&#xff0c;该缓存为请求范围保留数据。 例如 import org.springframework.cache.concurrent.ConcurrentMapCache; import org…

linux终止mysql进程_Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法

前言最近发现MySQL服务隔三差五就会挂掉&#xff0c;导致我的网站和爬虫都无法正常运作。自己的网站是基于MySQL&#xff0c;在做爬虫存取一些资料的时候也是基于MySQL&#xff0c;数据量一大了&#xff0c;MySQL它就有点受不了了&#xff0c;时不时会崩掉&#xff0c;虽然我自…

系统错误null是什么意思_为什么NULL是错误的?

系统错误null是什么意思Java中NULL用法的简单示例&#xff1a; public Employee getByName(String name) {int id database.find(name);if (id 0) {return null;}return new Employee(id); }这种方法有什么问题&#xff1f; 它可能返回NULL而不是对象-这是错误的。 在面向对…

mysql数据库版本不同_mysql数据库版本不同所引起的问题

1.sql_mode不同所引起的问题mysql5.7 ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column lhh.lhh.id which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode…

线性搜索或顺序搜索算法在Java中如何工作? 示例教程

大家好&#xff0c;我之前谈到了二进制搜索算法的工作原理&#xff0c;并分享了在Java中实现二进制搜索的代码。 在那篇文章中&#xff0c;有人问我是否还存在其他搜索算法&#xff1f; 如果数组中的元素未排序&#xff0c;又如何使用二进制搜索算法&#xff0c;该如何搜索呢&a…

junit规则_JUnit规则

junit规则介绍 在本文中&#xff0c;我想展示一个示例&#xff0c;说明如何使用JUnit Rule简化测试。 最近&#xff0c;我继承了一个相当复杂的系统&#xff0c;并未对所有内容进行测试。 甚至经过测试的代码也很复杂。 通常&#xff0c;我看到缺乏测试隔离。 &#xff08;我将…

mysql server 5.0安装教程_MySQL Server 5.0安装教程

运行MySQL Server 5.0安装程序“setup.exe”&#xff0c;出现如下界面&#xff1a;安装向导启动&#xff0c;按“Next”继续&#xff1a;选择安装类型&#xff0c;为了方便熟悉安装过程&#xff0c;我们选择“Custom”。按“Next”继续&#xff1a;在“Developer Components”上…

Kubernetes集群上的Apache Ignite和Spring第2部分:Kubernetes部署

以前&#xff0c;我们已经成功创建了第一个由Apache Ignite支持的Spring boot Application。 在此博客上&#xff0c;我们将重点介绍Kubernetes方面需要做的事情&#xff0c;以便能够启动我们的应用程序。 如先前博客所述&#xff0c;我们需要制定我们的Kubernetes RBAC策略。…

centos6.5 安装多个mysql_在centos6,5(64位)系统安装多实例mysql5.6

首先你安装个单实例的mysql试一试一 检查你电脑之前是否装了mysqlrpm -qa | grep mysql这条命令只是查看你系统是否使用过yum或者rpm包安装mysql&#xff0c;对用源码包安装的mysql是查不到的&#xff0c;所以基本用不到二 安装编译所需的包yum -y install make gcc-c cmake bi…

hibernate jpa_JPAHibernate替代方案。 如果JPA或Hibernate对于我的项目而言不够好,该怎么办?...

hibernate jpa你好&#xff01;你好吗&#xff1f; 今天我们将讨论不建议使用JPA / Hibernate的情况。 在JPA领域之外&#xff0c;我们还有哪些选择&#xff1f; 我们将谈论的是&#xff1a; JPA /Hibernate问题 解决一些JPA /Hibernate问题的方法 选择此处描述的框架的标准…

mysql中常见查询表_MySQL中常见查询

1 --1、查询“001”课程比“002”课程成绩高的所有学生的学号&#xff1b;2 SELECT a.s FROM sc a,sc b WHERE a.sb.s AND a.c1 AND b.c2 AND a.score >b.score;3 --2、查询平均成绩大于60分的同学的学号和平均成绩&#xff1b;4 SELECT student.s,avg(score) FROM student,…

约束流–没有Drools规则语言的现代Java约束

传统上&#xff0c;要使用OptaPlanner进行扩展&#xff0c;您必须学习DRL。 不再。 借助受Java 8 Streams和SQL启发的新Constraints Streams API&#xff0c;您现在可以用Java &#xff08;或Kotlin或Scala&#xff09; 编写约束&#xff0c;并且仍然可以从增量计算中受益。 在…