Mockito 简单使用
有一个月没写博客了,以后再忙也要抽时间写啊。
目的
正常情况下,如果要对 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 简单使用的更多相关文章
- mockito简单教程
注:本文来源:sdyy321的<mockito简单教程> 官网: http://mockito.org API文档:http://docs.mockito.googlecode.com/h ...
- 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用
转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测 ...
- Mockito教程
Mockito教程 2017-01-20 目录 1 Mockito 介绍 1.1 Mockito是什么? 1.2 为什么需要Mock 1.3 Stub和Mock异同 1.4 Mockito资 ...
- 单元测试系列:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- 单元测试系列之五:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- Mockito 入门详解
一个测试方法主要包括三部分: setup 执行操作 验证结果 public class CalculatorTest { Calculator mCalculator; @Before // setu ...
- Mockito-简单使用使用
参考案例:(本位使用markdown编写) git.oschina实例:https://gitee.com/lhhTestTool/LhhMockito # LhhMockitomock 单元测试 M ...
- 原!!关于java 单元测试Junit4和Mock的一些总结
最近项目有在写java代码的单元测试,然后在思考一个问题,为什么要写单元测试??单元测试写了有什么用??百度了一圈,如下: 软件质量最简单.最有效的保证: 是目标代码最清晰.最有效的文档: 可以优化目 ...
- 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...
随机推荐
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- javascript中 try catch finally 的使用
例一:function message(){ try { adddlert("Welcome guest!") } catch(err) { txt="此页面存在一个错误 ...
- js html 页面倒计时 精确到秒
<!doctype html> <html> <head> <meta charset="utf-8"> </head> ...
- FreeSWITCH快速录音
一.背景 测试人员反映FreeSWITCH录音不及时,需要大约5秒的时间才能捕获到RTP流. 二.原因及解决 查了下资料,FreeSWITCH默认的录音参数配置是开启缓冲的, 即RTP流大小到达655 ...
- Javascript MVC 学习笔记(一) 模型和数据
写在前面 近期在看<MVC的Javascript富应用开发>一书.本来是抱着一口气读完的想法去看的.结果才看了一点就傻眼了:太多不懂的地方了. 仅仅好看一点查一点,一点一点往下看吧,进度虽 ...
- maven依赖包冲突解决办法
今天在写一个demo时报了以下错误 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding /slf4j-lo ...
- Android开发学习总结——搭建最新版本的Android开发环境
原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...
- 关于haproxy多域名证书的配置
frontend main bind *: bind *: ssl crt /etc/haproxy/kong.com.pem crt /etc/haproxy/51yijI.com.pem no-s ...
- scala中json与对象的转换
遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换.如下 case class Book (author: Strin ...
- [CTCI] 下一个较大元素
下一个较大元素 题目描述 现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素. 给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为 ...