Mockito Hello World

项目配置

  IDE是Intellij IDEA,用gradle配置项目.
  新建一个Java项目,gradle中需要有这个:
 
repositories { jcenter() }
dependencies { testCompile "org.mockito:mockito-core:1.+" }
单元测试用JUnit 4,所以gradle文件如下:
apply plugin: 'java'
apply plugin: 'idea' sourceCompatibility = 1.5
version = '1.0' repositories {
mavenCentral()
jcenter()
} dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile "org.mockito:mockito-core:1.8.5"
}

  写好之后在命令行执行:gradle idea
  相关的包就会下载好,并出现在这里:
 
 

Hello World程序

  想着写一个Hello World说明一下Mockito怎么用,结果写着写着就写复杂了.
  先看代码:
package com.mengdd.examples.mockito;

public class HelloWorld {
private MyRobot mRobot; public MyRobot getRobot() {
return mRobot;
} public void setRobot(MyRobot robot) {
this.mRobot = robot;
} /**
* This is the method we want to test.
* When there is an robot, this method return the robot's information
* otherwise, return some sorry text
*/
public String sayHello() {
MyRobot robot = getRobot();
if (null != robot) {
return robot.getSomeInfo();
} return "No robot here, sorry!";
} /**
* MyRobot class
*/
public static class MyRobot { /**
* Get some information from somewhere, the implementation may varies
*/
public String getSomeInfo() {
return "Hello World -- From robot";
}
}
}

  这段代码里面包含了一个HelloWorld类和一个内部静态类MyRobot(我的机器人).
  HelloWorld中有一个方法叫sayHello(),是我们要测的方法.
  它会判断成员变量是否为空,不为空则调用其方法获取一些信息,否则返回一条提示信息.
 
 
  -------------------
  这里插播一下,关于内部类的介绍可以参见以前的一篇笔记:http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html
  内部静态类和内部非静态类可以类比:静态成员变量和非静态成员变量.
  -------------------
 
 
  测试类代码如下:
package com.mengdd.examples.mockito;

import org.junit.Test;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; public class HelloWorldTest {
@Test
public void testSayHelloWhenThereIsRobot() throws Exception {
// We want to test the sayHello() method in the class HelloWorld.
// But we don't care about how MyRobot get its information.(We can treat it as external interface). // Maybe the robot rely on many complicated things.(Although it's simple in this case.)
// And when the robot's actions change in the future, we don't need to change this test case. // We can mock the MyRobot's action to make it simple and just test whether sayHello() can do its own work. // Mock steps
HelloWorld.MyRobot robot = mock(HelloWorld.MyRobot.class); // Mock MyRobot class
String mockInfo = "some mock info";
when(robot.getSomeInfo()).thenReturn(mockInfo); // Set behavior for mock object // real object
HelloWorld helloWorld = new HelloWorld();//This is the real objec we want to test
helloWorld.setRobot(robot);//set the mock robot to real object // execute the target method we want to test
String result = helloWorld.sayHello(); // assert the result is what we want to have
assertThat(result, is(mockInfo));
}
}

  因为我们要测试的是HelloWorld的sayHello()方法是否能正常工作.
  我们需要假定其中robot的行为是正常的(我们并不关心robot实际上做的工作,以及它怎么做),所以这里用到了mock.
  比如如果机器人的实现中要发送一个请求,我们这里就是直接mock它得到的结果,而不是真的去发这个请求.
 
  就好像准备好了所需要的所有外部条件,看sayHello()方法的表现是否能符合我们的预期.
 
 
  为了全面起见,测试了sayHello()的另一种case,这里没有用到mockito.
@Test
public void testSayHelloWhenThereIsNoRobot() throws Exception {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setRobot(null); String result = helloWorld.sayHello(); assertThat(result, is("No robot here, sorry!"));
}
 
 

参考资料

  官网: http://mockito.org/
  Mockito at github: https://github.com/mockito/mockito
  可以在这里看版本号: http://mvnrepository.com/artifact/org.mockito/
 

Mockito Hello World的更多相关文章

  1. Junit mockito 测试Controller层方法有Pageable异常

    1.问题 在使用MockMVC+Mockito模拟Service层返回的时候,当我们在Controller层中参数方法调用有Pageable对象的时候,我们会发现,我们没办法生成一个Pageable的 ...

  2. Junit mockito解耦合测试

    Mock测试是单元测试的重要方法之一. 1.相关网址 官网:http://mockito.org/ 项目源码:https://github.com/mockito/mockito api:http:/ ...

  3. Android 单元测试(junit、mockito、robolectric)

    1.运用JUnit4 进行单元测试 首先在工程的 src 文件夹内创建 test 和 test/java 文件夹. 打开工程的 build.gradle(Module:app)文件,添加JUnit4依 ...

  4. mockito使用心得

    前提:pom引用<dependency> <groupId>junit</groupId> <artifactId>junit</artifact ...

  5. Mock之easymock, powermock, and mockito

    easymock, powermock, and mockito Easymock Class Mocking Limitations To be coherent with interface mo ...

  6. 用Mockito mock普通的方法

    上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口.这个时候就需要利用Mockito来协助我们完成测试. 当然,你可以选择e ...

  7. mock测试框架Mockito

    无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...

  8. Mockito自定义verify参数Matcher

    在TDD开发中,也许我们会遇见对一些重要的无返回值的行为测试,比如在用户的积分DB中增加用户的积分,这个行为对于我们的业务具有重要的价值,所以我们也希望能测试覆盖这部分业务价值.这个时候我们就得使用m ...

  9. Mockito学习资料

    官网:http://mockito.org/ https://dzone.com/refcardz/mockito

随机推荐

  1. Vue.js学习笔记(6)tree

    分享一段用 <ul>和<li>标签实现tree的代码,可能写的不是很好,如果大家有更好的希望和小颖分享下.嘻嘻 啦啦啦,代码看这里喽: <div class=" ...

  2. Android探索之BroadcastReceiver具体使用以及安全性探究

    前言: 最近的计划是学习一下iOS的NSNotificationCenter,突然想起来的Android的广播机制,所以还是觉得先对BroadcastReceiver来个全面的总结然后再去学习NSNo ...

  3. JavaScript阻塞剖析与改善

    一.阻塞特性 <高性能JavaScript>一书中,关于第一章“Loading and Execution”,提到了无阻塞加载JavaScript技术,目的是为了提高页面呈现速度. 说到无 ...

  4. tomcat匹配请求流程(原创)

    tomcat8.0.36 配置Connector属性allowTrace为true时,允许TRACE方法,默认禁止. tomcat8.0.36有一个BUG,该BUG在8.0.37里被修复,就是一个解析 ...

  5. Struts2 源码分析——Action代理类的工作

    章节简言 上一章笔者讲到关于如何加载配置文件里面的package元素节点信息.相信读者到这里心里面对struts2在启动的时候加载相关的信息有了一定的了解和认识.而本章将讲到关于struts2启动成功 ...

  6. GitHub托管BootStrap资源汇总(持续更新中…)

    Twitter BootStrap已经火过大江南北,对于无法依赖美工的程序员来说,这一成熟前卫的前端框架简直就一神器,轻轻松松地实现出专业的UI效果.GitHub上相关的的开源项目更是层出不穷,在此整 ...

  7. MVC学习系列12---验证系列之Fluent Validation

    前面两篇文章学习到了,服务端验证,和客户端的验证,但大家有没有发现,这两种验证各自都有弊端,服务器端的验证,验证的逻辑和代码的逻辑混合在一起了,如果代码量很大的话,以后维护扩展起来,就不是很方便.而客 ...

  8. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  9. LocalDB在IIS中的运行失败

    Using LocalDB with Full IIS, Part 1: User Profile http://blogs.msdn.com/b/sqlexpress/archive/2011/12 ...

  10. Autofac - 程序集扫描

    通过程序集扫描, 能够自动注册符合规则的类型. 这种方式, 很方便. 这一篇就介绍下程序集扫描吧. 一.扫描 其实前面已经介绍过, 这种方式. 不过并不全. 先看一个之前的方式: var builde ...