`

Mockito(一) -- 入门篇

    博客分类:
  • Java
阅读更多

Mockito是一种mock工具/框架。我理解EasyMock有点过时了,Mockito是现在比较流行的。

什么是mock?说的直白一点,大家都知道unit test应该是尽可能独立的。对一个class的unit test不应该再和其他class有任何交互。

现在有一个类,扫描一个目录并将找到的文件都上传到FTP server。该类对于不同的FTP响应(找不到FTP server 或 上传成功,或上传失败),有一些后续操作。

在写这个类的UT时,我们就必须虚构出来一个FTP对象。这样在UT中,这个虚构的对象能够代替真正的FTP,对被测试类的调用做出一定的响应。从而知道被测试类是否正确的调用了FTP并做出一些正确的期望的响应。从而达到测试的目的。

mock可以模拟各种各样的对象,从而代替真正的对象做出希望的响应。

关于mock的概念和EasyMock,可以参考:

 Mock object and EasyMock framework

http://blog.csdn.net/OnlyQi/archive/2011/04/26/6364885.aspx

 

官网:http://mockito.org/

 一篇很好的入门文章:

http://blog.csdn.net/huoshuxiao/archive/2010/12/30/6107835.aspx

 一些稍微复杂且实用一点的例子:

http://gojko.net/2009/10/23/mockito-in-six-easy-examples/

 

下面介绍mockito的基本使用方法。

 如前面所说,我们需要创建一个mock对象来代替真的对象。

因此,

模拟对象是第一步。模拟对象使用mock();

指定mock对象被调用时的返回值是第二步,比如指定让mockFTP对象第一次被调用时返回"找不到FTP server"。这一步一般称为stubbing。一般是when(mockedList.get(0)).thenReturn("first")的样子。

验证被测试类是否正确工作是第三步,使用verify()。例如,验证当mockFTP对象返回"找不到FTP server"时,测试代码是否按要求重试。

然后测试就完成啦~~

 

模拟对象:

  1. // 模拟LinkedList 的一个对象  
  2. LinkedList mockedList = mock(LinkedList.class);   
  3.   
  4. // 此时调用get方法,会返回null,因为还没有对方法调用的返回值做模拟   
  5. System.out.println(mockedList.get(999));  

模拟方法调用的返回值:

  比如

  1. // 模拟获取第一个元素时,返回字符串first。  给特定的方法调用返回固定值在官方说法中称为stub。
  2. when(mockedList.get(0)).thenReturn("first");   
  3.   
  4. // 此时打印输出first   
  5. System.out.println(mockedList.get(0));  

模拟方法调用抛出异常:

  1. // 模拟获取第二个元素时,抛出RuntimeException  
  2. when(mockedList.get(1)).thenThrow(new RuntimeException());   
  3.   
  4. // 此时将会抛出RuntimeException  
  5. System.out.println(mockedList.get(1));  
 没有返回值类型的方法也可以模拟异常抛出:
 

doThrow(new RuntimeException()).when(mockedList).clear();

 

模拟调用方法时的参数匹配:

  1. // anyInt()匹配任何int参数,这意味着参数为任意值,其返回值均是element  
  2. when(mockedList.get(anyInt())).thenReturn("element");   
  3.   
  4. // 此时打印是element   
  5. System.out.println(mockedList.get(999)); 

模拟方法调用次数:

  1. // 调用add一次   
  2. mockedList.add("once");   
  3.   
  4. // 下面两个写法验证效果一样,均验证add方法是否被调用了一次  
  5. verify(mockedList).add("once");   
  6. verify(mockedList, times(1)).add("once");  
 还可以通过atLeast(int i)和atMost(int i)来替代time(int i)来验证被调用的次数最小值和最大值。
 
结束~很简单吧。
这篇文章基本上是转帖,下篇文章将介绍如何在代码里使用Mockito,最后介绍mockito的大部分功能。
分享到:
评论

相关推荐

    SpringBoot(入门篇)资料.rar

    在入门篇的学习中,我们会涉及以下几个核心知识点: 1. **自动配置**:SpringBoot的核心特性之一就是自动配置,它根据项目依赖来自动设置Bean。例如,如果你引入了数据访问相关的库,SpringBoot会自动配置数据源和...

    Junit4学习笔记—入门篇.pdf

    ### JUnit4学习笔记——入门篇 #### 一、配置MyEclipse在项目中引入JUnit4.jar包 在使用JUnit4进行单元测试之前,首先需要确保开发环境已正确配置JUnit库。对于使用MyEclipse IDE的开发者来说,可以通过以下步骤...

    springBoot笔记二-来自于百度文库1

    在本篇【springBoot笔记二-来自于百度文库1】中,主要讲解了Spring Boot的基础概念、核心特性以及如何创建一个简单的Spring Boot项目。以下是详细的知识点解析: 1. **Spring Boot简介**: - Spring Boot是Spring...

    学习Spring(一)入门

    在本篇【学习Spring(一)入门】的学习中,我们将探讨Spring框架的基础知识,这是一个广泛应用于Java企业级应用的开源框架。Spring以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    Spring Boot 简介(入门篇)

    12. spring-boot-starter-test:用于测试 Spring Boot 应用程序,包括 JUnit、Hamcrest 和 Mockito 13. spring-boot-starter-webflux:用于构建 WebFlux 应用程序,使用 Spring 框架的响应式 Web 框架 总结 Spring...

    Spring Boot 初探 | 第一篇:第一个Spring Boot程序(示例程序)

    在本篇中,我们将探索如何创建并运行你的第一个 Spring Boot 应用程序。 1. **快速入门:创建项目** 要开始一个 Spring Boot 项目,你可以使用 Spring Initializr(https://start.spring.io/)。这是一个在线工具...

    JUnit入门笔记~

    这篇入门笔记将带你深入了解JUnit的基本概念、使用方法以及其在实际开发中的应用。 **一、JUnit简介** JUnit是一个开源的、基于Java的测试框架,它简化了对代码进行单元测试的过程。通过JUnit,开发者可以快速地...

    spring入门笔记

    **Spring 框架概述** Spring 是一个开源的 Java 应用框架,它以其轻量级、模块化和面向切...希望这篇入门笔记能为你开启 Spring 的探索之旅,欢迎在学习过程中发现错误或有任何疑问时,通过博主的博客进行交流和指正。

    spring mvc step by step,例子

    这篇博文通过一步步的教程,将引导我们深入了解如何使用Spring MVC构建一个简单的Web应用。 首先,我们需要了解Spring MVC的基本组件和它们的作用: 1. **DispatcherServlet**:这是Spring MVC的前端控制器,负责...

    Spring 3 MVC - Part 1 & Part 2 (with log4j)

    《Spring 3 MVC 分析与实践 - 零基础入门及深入探讨》 Spring MVC作为Spring框架的重要组成部分,是Java Web开发中广泛采用的模型-视图-控制器(MVC)架构模式。本系列教程分为Part 1和Part 2,旨在帮助开发者从零...

    Java学习从入门到精通

    #### 一、工具篇:奠定Java学习基础的关键 ##### 1. JDK(Java Development Kit):Java的核心与起点 JDK,作为Java技术栈的核心,包含了Java运行环境(JRE)、一系列Java工具以及基本的类库(rt.jar)。掌握JDK,...

    springboot全套学习资料.txt

    #### 一、Spring Boot基础篇 ##### 1.1 Spring Boot简介 - **定义**:Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化新Spring应用的初始搭建以及开发过程。 - **特点**: - 约定优于配置(Convention...

    java学习路线(项目开发、web方向、大数据方向).rar

    Java是一种广泛使用的高级编程语言,尤其在企业级应用、Web开发和大数据处理领域有着重要的地位。本学习路线针对想要深入Java技术,特别是对项目开发、Web方向和大数据方向感兴趣的学员设计,旨在帮助他们构建全面而...

    springside4 quickstart

    《SpringSide 4快速入门详解》 SpringSide 4 是一个基于Java的开源项目,它为Spring框架提供了一套简洁、规范的开发实践。在快速发展的IT行业中,SpringSide 4以其高效、易于理解的特性,深受广大Java开发者喜爱。...

    mock

    4. `JUnit单元测试Mock技术之jMock用法介绍.html`和`jMock简单入门.html`:jMock是另一个Mocking库,它提供了基于接口的Mocking功能,适用于Java应用。这两个文件可能详细介绍了如何在JUnit测试中使用jMock。 5. `...

    Springboot博客

    而“工具”标签可能是指博客中提及的一些开发辅助工具,例如IDEA(IntelliJ IDEA)作为Java开发的主流IDE,Maven或Gradle作为构建工具,Git作为版本控制系统,以及可能的调试、测试工具,如JUnit和Mockito等。...

    Java学习材料(449篇)

    这个压缩包中的449篇文章,将为学习者提供一个全面而系统的Java学习路径,从入门到精通,逐步提升编程技能。每个主题都可能包含实例代码、解析和实践建议,帮助读者理论结合实践,真正掌握Java编程。对于那些希望在...

Global site tag (gtag.js) - Google Analytics