Mockito是一个流行的Mocking框架。它使用起来简单,学习成本很低,而且具有非常简洁的API,测试代码的可读性很高。因此它十分受欢迎,用
户群越来越多,很多的开源的软件也选择了Mockito。要想了解更多有关Mockito的信息,请访问它的官方网
站:http://mockito.org/
在开始使用Mockito之前,先简单的了解一下Stub和Mock的区别。
Stub对象用来提供测试时所需要的测试数据,可以对各种交互设置相应的回应。例如我们可以设置方法调用的返回值等等。Mockito中
when(…).thenReturn(…)
这样的语法便是设置方法调用的返回值。另外也可以设置方法在何时调用会抛异常等。Mock对象用来验证测试中所依赖对象间的交互是否能够达到预期。
Mockito中用 verify(…).methodXxx(…) 语法来验证
methodXxx方法是否按照预期进行了调用。有关stub和mock的详细论述见,Martin Fowler文章《Mocks Aren't
Stub》http://martinfowler.com/articles/mocksArentStubs.html。在Mocking框架中所谓
的mock对象实际上是作为上述的stub和mock对象同时使用的。因为它既可以设置方法调用返回值,又可以验证方法的调用。
Mockito的获取
Jar包的获取
可以访问下面的链接来下载最新的Jar包,笔者使用的当前最新版为:1.8.5 http://code.google.com/p/mockito/downloads/list
Maven
如果项目是通过Maven管理的,需要在项目的Pom.xml中增加如下的依赖:
-
<dependencies>
-
<dependency>
-
<groupId>org.mockito</groupId>
-
<artifactId>mockito-all</artifactId>
-
<version>1.8
.
5
</version>
-
<scope>test</scope>
-
</dependency>
-
</dependencies>
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.5</version>
<scope>test</scope>
</dependency>
</dependencies>
Mocktio包的引入
在程序中可以import org.mockito.Mockito;然后调用它的static方法,或者import static org.mockito.Mockito.*;个人倾向于后者,因为这样可以更方便些。
一个简单的例子
-
import
static
org.junit.Assert.*;
-
import
static
org.mockito.Mockito.*;
-
import
java.util.Iterator;
-
import
org.junit.Test;
-
-
-
-
-
-
public
class
SimpleTest {
-
-
@Test
-
public
void
simpleTest(){
-
-
Iterator i=mock(Iterator.class
);
-
when(i.next()).thenReturn("Hello"
).thenReturn(
"World"
);
-
-
String result=i.next()+" "
+i.next();
-
-
verify(i, times(2
)).next();
-
-
assertEquals("Hello World"
, result);
-
}
-
}
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.Iterator;
import org.junit.Test;
/**
*
* @author Brian Zhao
*/
public class SimpleTest {
@Test
public void simpleTest(){
//arrange
Iterator i=mock(Iterator.class);
when(i.next()).thenReturn("Hello").thenReturn("World");
//act
String result=i.next()+" "+i.next();
//verify
verify(i, times(2)).next();
//assert
assertEquals("Hello World", result);
}
}
在上面的例子中包含了Mockito的基本功能:
创建Mock对象
创建Mock对象的语法为,mock(class or interface)。例子中创建了Iterator接口的mock对象。
设置方法调用的预期返回
通过when(mock.someMethod()).thenReturn(value)
来设定mock对象某个方法调用时的返回值。例子中我们对Iterator接口的next()方法调用进行了预期设定,当调用next()方法时会返
回”Hello”,由于连续设定了返回值,因此当第二次调用时将返回”World”。
验证方法调用
接下来对mock对象的next()方法进行了一系列实际的调用。mock对象一旦建立便会自动记录自己的交互行为,所以我们可以有选择的对它的
交互行为进行验证。在Mockito中验证mock对象交互行为的方法是verify(mock).someMethod(…)。于是用此方法验证了
next()方法调用,因为调用了两次,所以在verify中我们指定了times参数(times的具体应用在后面会继续介绍)。最后assert返回
值是否和预期一样。
分享到:
相关推荐
PowerMock是一个扩展了其它如EasyMock等mock框架的、功能更加强大的框架。PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。...
UT配套代码
先来看看下面这个示例:从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例。 一种替代方案就是使用mocks从图中可以清晰的看出 mock对象就是在调试期间用来作为真实对象的...
spring集成TestNG与Mockito框架单元测试方法,方便学习者能快速上手如何单测,对自己的代码能够有质量保证。
Java单元测试核心技能,工作这么多年了,推荐给大家一起学习提高。
springMVC 整合mockito单元测试学习-附件资源
非常适合初学者,可配合本人主页的文章进行学习
Mockito是一个为Java开发的强大的模拟测试框架。其主要功能是创建和配置Mock对象,以简化存在外部依赖的类的测试。通过使用Mockito,我们可以虚拟出一个外部依赖,这样可以降低测试组件之间的耦合度,使得我们能更...
Java单元测试核心技能,工作这么多年了,推荐给大家一起学习提高。
主要介绍了Java mockito单元测试实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了SpringBoot项目中使用Mockito的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
通过对MyBatis的深入学习,包括MyBatis核心对象、配置文件、映射文件的使用。 文章具体介绍了: MyBatis核心对象SqlSessionFactoryBuilder的作用 ...JUnit与Mockito结合测试示例 工具类MyBatisUtil代码示例
mockito bug管理 禅道 jira 开发工具 编程工具 eclipse myeclipse idea vi VS webstorm sublime text 版本控制 svn git 项目管理 maven Nexus Jenkins 工作软件 反编译软件 office系列 下载...
1.其它工具需要每个方法都写一大堆测试代码,需要开发成本、需要解决测试代码的 bug、业务代码更改后需要同步修改测试代码等; UnitAuto 不需要写任何代码,直接读取方法的属性,自动注入参数,拿到返回值和类成员...
springboot+mybatis-plus 生成service、dao、po层
学习使用Java和Selenium进行自动化测试 课程链接: : 您迈向出色的自动化测试仪的第一步 课程清单 入门 Eclipse- https://courses.in28minutes.com/p/eclipse-tutorial-for-beginners Maven- ...
要求Java SE开发套件8( jdk-1.8 )依存关系Encog机器学习框架( org.encog:encog-core:3.3.0 ) Apache POI( org.apache.poi:poi-ooxml:3.16 ) SQLiteJDBC( org.xerial:sqlite-jdbc:3.19.3 ) JUnit( junit:...
安东尼Inthavong。 贾维斯咨询 我叫Anthony Inthavong,我于2020年毕业于多伦多大学,专门研究机器学习和数据... 主管: JUnit 4,Mockito,Pandas,Numpy,SciPy,Scikit学习,测试驱动开发(TDD) 熟悉: TensorFl