Mockito Hello World

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/

  官方文档: http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html

  Mockito at github: https://github.com/mockito/mockito

  可以在这里看版本号: http://mvnrepository.com/artifact/org.mockito/

时间: 2024-11-07 21:05:11

Mockito Hello World的相关文章

mockito使用心得

前提:pom引用<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version></dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>sprin

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

1.问题 在使用MockMVC+Mockito模拟Service层返回的时候,当我们在Controller层中参数方法调用有Pageable对象的时候,我们会发现,我们没办法生成一个Pageable的对象,会报一个Pageable是一个接口的错误.当我们把所有的参数从Pageable接口变成Pageable的实现类PageRequest的时候,所有的方法参数都换成PageRequest,又会出现一个新的错误,且不说PageRequest不能作为参数用于hibernate的分页查询,另一方面,它没

Junit mockito

Mock测试是单元测试的重要方法之一. 1.相关网址 官网:http://mockito.org/ 项目源码:https://github.com/mockito/mockito api:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html 2.什么是Mock测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获

powerMock比easyMock和Mockito更强大(转)

powerMock是基于easyMock或Mockito扩展出来的增强版本,所以powerMock分两种类型,如果你习惯于使用easyMock的,那你就下载基于easyMock的powerMock,反之你喜欢用mockito的话就下载另一种PowerMock. powerMock之所以说它更强大是因为它解决了easyMock和Mockito没有解决的问题,就是可以模仿static,private和final的方法.举例如下: public class User{ private User use

JUnit + Mockito 单元测试(二)

JUnit 是单元测试框架.Mockito 与 JUnit 不同,并不是单元测试框架(这方面 JUnit 已经足够好了),它是用于生成模拟对象或者直接点说,就是"假对象"的工具.两者定位不同,所以一般通常的做法就是联合 JUnit + Mockito 来进行测试. 入门 首先是配置 Mock 对象,看看例子怎么写的. [java] view plain copy List mock = mock( List.class ); when( mock.get(0) ).thenReturn

mockito框架

参考自 http://www.cnblogs.com/silence-hust/p/5017233.html http://blog.csdn.net/sdyy321/article/details/38757135 首先创建一个maven工程 在pom文件中,存在如下依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId&g

mock测试框架Mockito

无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访问实际的文件系统或数据库),而TDD经常会碰到协同模块尚未开发的情况,而mock技术正是解决这些问题的灵丹妙药. mock技术的目的和作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开. 我们可以自己编写自定义的Mock对象实现mock技术,但是编写自定义的Mo

Mockito简介(转)

Mockito 是目前 java 单测中使用比较流行的 mock 工具.其他还有 EasyMock,JMock,MockCreator,Mockrunner,MockMaker 及 PowerMock. 项目地址:https://code.google.com/p/mockito/ powermock 简介 EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书写过程而被许多人应用在自己的工作中,但是这两种 Mock 工具都不可以实现对静态函数.构造函数.私有函数.Final

mockito使用

mockito学习资料: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html http://blog.csdn.net/sdyy321/article/details/38757135 ? 1.验证行为是否发生 1 2 3 4 5 6 7 8 @Test public void mockedList(){     List mockedList = mock(List.class);     mockedList.add(

Mockito入门使用一例

Mock的使用有很多方式,我们常用的有以下几种,看示例代码 public class TestMock { @Mock A a;//生成一个A的Mock @Spy A a1 = new A();//生成一个A的Spy, Spy或是InjectMocks必需自己初始化对象,Mock可以不用初始化 @Before public void init(){ MockitoAnnotations.initMocks(this);//初使化Mock } @Test public void testGo(){