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出来的方法中,改变方法参数的值 一 ...
随机推荐
- 基于matplotlib的数据可视化 - 三维曲面图gca
1 语法 ax = plt.gca(projection='3d')ax.plot_surface(x,y,z,rstride=行步距,cstride=列步距,cmap=颜色映射) gca(**kwa ...
- angularjs框架及其生态环境 --待续
angular的MVVM框架结构: 1. app, 2.routes, config, 3.module, 4.Controller, $scope,controller参数,事件 ...
- VC下加载JPG/GIF/PNG图片的两种方法
转载自:http://blog.sina.com.cn/s/blog_6582aa410100huil.html 仅管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg ...
- 实用的php购物车程序
实用的php教程购物车程序以前有用过一个感觉不错,不过看了这个感觉也很好,所以介绍给需要的朋友参考一下. <?php//调用实例require_once 'cart.class.php';ses ...
- java播放wav文件
import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import java ...
- 关于 ASP.NET 中的 Bundle 的补充说明(草稿)
一直以来,都认为 Bundle 有可能会不正确的压缩,而导致脚本出错,所以一直将这个功能处于禁用状态. 突然发现,其实只是自己使用的不对... 目前发现 Bundle 会导致的错误分两种情况: 1.路 ...
- 什么是内联函数(inline function)
In C, we have used Macro function an optimized technique used by compiler to reduce the execution ti ...
- Newton差分插值性质证明(均差与差分的关系证明)
- confluence数据库的配置文件
mysql> select u.id,u.user_name,u.active from cwd_user u join cwd_membership m on u.id=m.child_use ...
- PHP网站环境搭配: Apache Http+PHP+Mysql
Apache Http+PHP+Mysql 环境搭配 1. 先下载上述三个软件 都要下载对应系统的软件,mysql还可以再下载navicat for mysql. 2. 安装Apache Http ...