有一个月没写博客了,以后再忙也要抽时间写啊。

目的

正常情况下,如果要对 UserService 中方法的测试,那么其依赖的 UserDao 也要可以调通,但是,UserDao 可能并不是直接到 DB 的,也可能到各种存储介质中,那么问题就复杂了,我们的目的仅仅是要测试 UserService 中的业务处理逻辑,UserDao 返回的结果并不重要

这种情况下,如果我们能模拟一个 UserDao 返回的结果来供 UserService 处理,就太好了

下面通过 Mockito 就能很简单的实现

实现

项目结构

User:

package com.zhengbin.service.test;

/**
* Created by ZhengBin on 2017/6/30.
*/
public class User {
private Integer id;
private String name; @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

User

UserDao:

package com.zhengbin.service.test;

import java.util.List;

/**
* Created by ZhengBin on 2017/6/30.
*/
public interface UserDao {
User getUser(int id); List<User> getUsers(int id);
}

UserDaoImpl:

package com.zhengbin.service.test;

import java.util.ArrayList;
import java.util.List; /**
* Created by ZhengBin on 2017/6/30.
*/
public class UserDaoImpl implements UserDao {
public User getUser(int id) {
User user = new User();
user.setId(id);
user.setName("zhengbin");
return user;
} public List<User> getUsers(int id) {
List<User> userList = new ArrayList<User>();
User user1 = new User();
user1.setId(1);
user1.setName("zhengbin");
userList.add(user1);
User user2 = new User();
user2.setId(2);
user2.setName("zb");
userList.add(user2);
return userList;
}
}

UserDao

UserService:

package com.zhengbin.service.test;

/**
* Created by ZhengBin on 2017/6/30.
*/
public interface UserService {
User getUser(int id);
}

UserServiceImpl:

package com.zhengbin.service.test;

/**
* Created by ZhengBin on 2017/6/30.
*/
public class UserServiceImpl implements UserService { private UserDao userDao; public User getUser(int id) {
System.out.println("doing something");
return userDao.getUser(id);
}
}

MockTest:

package com.zhengbin.service.test;

import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; /**
* Created by ZhengBin on 2017/6/30.
*/
public class MockTest {
@InjectMocks
private UserServiceImpl userService; @Mock
private UserDao userDao; @Before
public void setUp() {
MockitoAnnotations.initMocks(this);
} @Test
public void testGetUser() {
int id = 1;
User user = new User();
user.setName("mock - zb");
user.setId(0);
Mockito.when(userDao.getUser(1)).thenReturn(user);
System.out.println(userService.getUser(id));
}
}

Mockito 简单使用的更多相关文章

  1. mockito简单教程

    注:本文来源:sdyy321的<mockito简单教程> 官网: http://mockito.org API文档:http://docs.mockito.googlecode.com/h ...

  2. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测 ...

  3. Mockito教程

    Mockito教程 2017-01-20 目录 1 Mockito 介绍   1.1 Mockito是什么?  1.2 为什么需要Mock  1.3 Stub和Mock异同  1.4 Mockito资 ...

  4. 单元测试系列:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  5. 单元测试系列之五:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  6. Mockito 入门详解

    一个测试方法主要包括三部分: setup 执行操作 验证结果 public class CalculatorTest { Calculator mCalculator; @Before // setu ...

  7. Mockito-简单使用使用

    参考案例:(本位使用markdown编写) git.oschina实例:https://gitee.com/lhhTestTool/LhhMockito # LhhMockitomock 单元测试 M ...

  8. 原!!关于java 单元测试Junit4和Mock的一些总结

    最近项目有在写java代码的单元测试,然后在思考一个问题,为什么要写单元测试??单元测试写了有什么用??百度了一圈,如下: 软件质量最简单.最有效的保证: 是目标代码最清晰.最有效的文档: 可以优化目 ...

  9. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

    本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...

随机推荐

  1. mysql单机多实例

    在数据库服务器上,可以架构多个Mysql服务器,进行单机多实例的读写分离: 可以通过mysqld_multi来进行多实例的管理,mysqld_multi是用perl写的脚本,原理是通过mysql_ad ...

  2. sqlserver不太常见的,可能常见但又疑问的tsql语句

    2013年10月29日16:01:58 当数据有 time类型列时候,比如 打电话的通话时长,我们查询时候不方便,我们可以添加一个冗余列,直接统计秒 ,但是 后期知道的,现在我把例如 00:12:23 ...

  3. MySQL 错误1418

    创建function的时候报如下错误: Error Code : This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ...

  4. gtest测试代码编写思想

    mockXXX类 . testXXX类 . mock method 1. mockXXX 类,通常使用继承测试目标类的方法,来方便针对目标类的测试提供部分扩展功能,比如为protected 成员添加g ...

  5. javascript的崛起及其生态元素

    随着web的流行,人们花在浏览器上的时间吸引了巨头们对浏览器的重视,继而几年前富客户端概念,一批富客户端技术的涌现,如silverlight, flex等,曾经风起云涌,最终都败给了html5 和 j ...

  6. mfc怎么显示jpg png图像

    如果是VS2005以上版本可以直接使用MFC自带的CImage类,如果不是可以用网上比较流行的CxImage,或者使用GDI+

  7. STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准的问题

    通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的, 原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计 ...

  8. (面试)Statement和PrepareStatement有什么区别

    (1)Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中.被封装的sql ...

  9. [转]JSON Web Token - 在Web应用间安全地传递信息

    JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 让我们来假想一下一个场景.在A用户关注了B用户的时候,系统发邮件给B用户, ...

  10. DBUtils查找最大的ID总是返回0

    1.实体: public class Order { private int id; private Date orderDate; public int getId() { return id; } ...