mockito入门学习

需要导入import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import java.util.Iterator;
import org.junit.Test;mock可以模拟各种各样的对象,替代真正的对象做出希望的响应。使用mockito的方法:1、使用mock()模拟对象。//模拟LinkList的一个对象
LinkedList mockdedList = mock(LinkedList.class);//此时条用get方法,会返回null,因为还没有对方法调用的返回值做模拟。System.out.printlin(mockedList.get(99));
2、指定mock对象被调用时的返回值。a、模拟,方法调用的返回值。//模拟获取第一个元素时,返回字符串first。给特定的方法调用返回固定值,在官方说法中称stub。(stub,为屏蔽客户调用远程主机上的对象,必须提供某些方式来模拟本地对象,这种本地对象称为存根stub)when(mockedList.get(0).thenReturn("first"));//此时打印输出firstSystem.out.println(mockedList.get(0));
b、模拟,方法调用抛出异常//模拟获取第二个元素时,抛出RuntimeExceptionwhen(mockedList.get(1)).thenThrow(new RuntimeException);//此时抛出RuntimeException异常System.out.println(mockedList.get(1));

没有返回值类型的方法也可以模拟异常抛出:doThrow(new RuntimeException()).when(mockedList).clear();c、模拟调用方法时的参数匹配//anyInt()匹配任何int参数,这表示参数为任何值,均返回elementwhen(mockedList.get(anyInt())).thenReturn("element");//此时打印是elementSystem.out.println(mockedList.get(99));d、模拟方法调用次数//调用add一次mockedList.add("once");//验证add方法是否被调用了一次,两种写法效果一样verify(mockedList)add("once");verify(mockedList,times(1)).add("once");还可以通过atLeast(int i)和taMost(int i)来验证被调用的次数的最小值和最大值3、验证被测试类是否正确工作,使用verify()。

默认情况下,对于所有的有返回值且没有stub过的地方,mockito会返回相应的默认值,对于内置类型会返回默认值,如int会返回0,布尔值返回false,对于其他type会返回null。mock对象会覆盖整个被mock的对象,因此没有stub的方法只能返回默认值。//重复stub两次,则以第二次为准,如下将返回”second“when(mockedList.get(0)).thenReturn("first");when(mockedList.get(0)).thenReturn("second");//下面这种形式表示第一次调用返回”first“,第二次调用返回”second“,可以写n多个when(mockedList.get(0)).thenReturn("first").thenReturn("second");如果实际调用次数超过了stub过的次数,则会一直返回最后一次stub的值,如上例,第三次调用get(0),则返回 ”second“

验证方法被调用了特定的次数//验证add方法被调用了两次verify(mockedList,times(2)).add("2");//验证add方法致至少被调用一次verify(mockedList.atLeastOnce()).add("2");//验证add方法至少被调用两次verify(mockedList,atLeast(2)).add("2");//验证add方法最大被调用5次verify(mockedList,atMost(5)).add("2");//验证add方法从未被调用vreify(mockedList,never()).add("2");找到冗余的调用,使用never();
				
时间: 2024-10-04 10:12:58

mockito入门学习的相关文章

Retrofit 入门学习

Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } 这些注解都有一个参数 value,用来配置其路径,比如示例中的 users/{user}/repos, 我们还注意到在构造 Retrofit

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

/Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/article/details/52736906 利用nodejs做爬虫 http://www.runoob.com/nodejs/nodejs-callback.html nodejs学习之路 http://www.runoob.com/php/php-tutorial.html php学习之路

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

js入门学习

在HTML,CSS学习的最后,开始入门学习javascript, 首先就是去了解它的用途 作用:使web页面能够与用户交互,作为控制浏览器给网页增添活力的方法 定义:它是一种脚本语言,作用于浏览器.和java没有半毛钱关系,主要是当时Netscape公司为了增加影响力改了名,,(是不是感觉很无耻) ps:区分程序的一种方式:1.客户端程序(client-side),像javascript就是,我觉得HTML,CSS应该也是. 2.服务器端程序(server-side),java,perl,php

mybatis入门学习

一.mybaits简介 java程序中常用的数据库框架. 二.mybait入门学习 1.环境 创建一个java或者javaweb项目:我是创建了一个structs项目,helloworld 2.添加相应的jar包

angularjs入门学习【指令篇】

一.首先我们来了解下指令API 属性 含义 restrict 申明标识符在模版中作为元素,属性,类,注释或组合,如何使用 priority 设置模版中相对于其他标识符的执行顺序 Template 指定一个字符串式的内嵌模版,如果你指定了模版是一个URL,那么是不会使用的 tempateUrl 指定URL加载的模版,如果你已经指定了内嵌的模版字符串,那么它不会使用的 Replace 如果为真,替换当前元素,如果是假或未指定,拼接到当前元素 Transclude 移动一个标识符的原始字节带你到一个新

正则表达式入门学习

\b-元字符,代表单词的开头或结尾,也就是单词的分界处. \bHi\b     下列未进行说明的都是元字符. .  匹配除了换行符以外的任意字符. * 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配.(不包含换行的字符) \bHi\b.*\bLucy\b \d 匹配一位数字(0或1或2......或9)  0\d\d-\d\d\d\d\d\d\d\d - 不是元字符 ,只匹配它本身. 避免重复 0\d{2}-\d{8}  {2}({8})指前面\d必须连续重复匹配2次(8次). \

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的