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出来的方法中,改变方法参数的值 一 ...
随机推荐
- mysql单机多实例
在数据库服务器上,可以架构多个Mysql服务器,进行单机多实例的读写分离: 可以通过mysqld_multi来进行多实例的管理,mysqld_multi是用perl写的脚本,原理是通过mysql_ad ...
- sqlserver不太常见的,可能常见但又疑问的tsql语句
2013年10月29日16:01:58 当数据有 time类型列时候,比如 打电话的通话时长,我们查询时候不方便,我们可以添加一个冗余列,直接统计秒 ,但是 后期知道的,现在我把例如 00:12:23 ...
- MySQL 错误1418
创建function的时候报如下错误: Error Code : This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ...
- gtest测试代码编写思想
mockXXX类 . testXXX类 . mock method 1. mockXXX 类,通常使用继承测试目标类的方法,来方便针对目标类的测试提供部分扩展功能,比如为protected 成员添加g ...
- javascript的崛起及其生态元素
随着web的流行,人们花在浏览器上的时间吸引了巨头们对浏览器的重视,继而几年前富客户端概念,一批富客户端技术的涌现,如silverlight, flex等,曾经风起云涌,最终都败给了html5 和 j ...
- mfc怎么显示jpg png图像
如果是VS2005以上版本可以直接使用MFC自带的CImage类,如果不是可以用网上比较流行的CxImage,或者使用GDI+
- STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准的问题
通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的, 原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计 ...
- (面试)Statement和PrepareStatement有什么区别
(1)Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中.被封装的sql ...
- [转]JSON Web Token - 在Web应用间安全地传递信息
JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 让我们来假想一下一个场景.在A用户关注了B用户的时候,系统发邮件给B用户, ...
- DBUtils查找最大的ID总是返回0
1.实体: public class Order { private int id; private Date orderDate; public int getId() { return id; } ...