用Mockito mock普通的方法
上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口。这个时候就需要利用Mockito来协助我们完成测试。
当然,你可以选择easyMock ,jmock等mock工具
在这里直接引用《PowerMock实战手册》中的例子
待测类:
public class EmployeeService {
private EmployeeDao employeeDao;
public EmployeeService(EmployeeDao employeeDao) {
this.employeeDao = employeeDao;
}
}
待测类调用的方法
public class EmployeeDao {
public int getTotal() {
throw new UnsupportedOperationException();
}
}
其中 getTotal 就是一个利用正常办法无法测试的函数。
测试类:
public class EmployeeServiceTest {
@Mock
private EmployeeDao employeeDao;
EmployeeService employeeService;
@BeforeMethod
public void init(){
MockitoAnnotations.initMocks(this);
employeeService = new EmployeeService(employeeDao);
}
@Test
public void testGetTotalEmployee() {
PowerMockito.when(employeeDao.getTotal()).thenReturn(10);
int total = employeeService.getTotalEmployee();
assertEquals(10, total);
}
}
@Mock 是Mockito的标记 与MockitoAnnotations.initMocks(this) 配合使用,等效于
EmployeeDao employeeDao = Mockito.mock(EmployeeDao.class)
如果些对象在测试类反复使用的话,前一种写法能节省很多代码
@BeforeMethod 是testNG标记 ,作用是在运行很一个测试方法之前运行此方法
@Test testNG标识,表明此方法是一个测试方法
PowerMockito.when(employeeDao.getTotal()).thenReturn(10);
录制mock的行为,当调用getTotal方法时,返回10
具体请参照:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html
下面是运行结果:
[TestNG] Running:
C:\Users\changzhz\AppData\Local\Temp\testng-eclipse--599967477\testng-customsuite.xml PASSED: testGetTotalEmployee ===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
=============================================== ===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
=============================================== [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@5f205aa: 49 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@424c0bc4: 8 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@2ff5659e: 37 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 1 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@1996cd68: 3 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@27ddd392: 5 ms
用Mockito mock普通的方法的更多相关文章
- 用PowerMockito来mock私有方法(转)
话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我 ...
- mock static方法
<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mock ...
- 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...
- powermockito “mock public 方法内部 Private方法的问题”
我需要测试的方法是 public 方法: public ResponseResult subscribe(SysSubscription sysSubscription) throws JsonGen ...
- [Mockito] Mock List interface
In this post, we are going to see more functionalities in Mockito. Mock a List interface: @Test publ ...
- 用PowerMock mock static方法
在编写代码时,经常需要调用别人已经写好的工具类,而这些工具提供的方法经常是static方法,在这里,直接贴出<PowerMock实战手册>中的例子 待测试方法: public class ...
- 单元测试遇到的Mock重载方法问题
测试某个异常抛出情况,单元测试输出为验证Logger的一条记录,该异常情况日志记录LogInfo,但是LogInfo中平时都用一个参数,在catch这个异常时调用了两个参数的重载方法,导致一直Mock ...
- PowerMock mock私有方法
import java.util.Random; public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if ...
- Mockito 如何 mock 返回值为 void 的方法
转载:https://unmi.cc/mockito-how-to-mock-void-method/#more-7748 最初接触 Mockito 还思考并尝试过如何用它来 mock 返回值为 vo ...
随机推荐
- Grafana + Zabbix --- 部署分布式监控系统
阅读目录: 1. 关闭防火墙 2. 安装Zabbix下载源 3. ZabbixClient --- 安装zabbix-agent代理 4. ZabbixServer --- 安装zabbix-ser ...
- Qt5 installation and path configuration
Replace Default Qt version paths in: /usr/lib/x86_64-linux-gnu/qtchooser/default.confor in newer rel ...
- :after和:before的作用及使用方法
1. :before 和 :after 的主要作用是在元素内容前后加上指定内容,示例: HTML代码: <p>你好</p> CSS代码: p:before{ content: ...
- CentOS6.5 根目录结构划分
/bin 系统的执行程序文件/dev 硬件设备的文件目录/home 用户的家目录/lib 系统库文件目录/mnt 挂载目录,外设的挂载/media 经常用于媒体文件 ...
- HTML5 十大新特性(七)——拖放API
拖放API是H5专门为了鼠标拖放而新提供了7个事件,可以分成三个部分来讲. 一.拖动的源对象(source)可以触发的事件 dragstart:拖动开始 drag:拖动进行中 dragend:拖动结束 ...
- json数组转普通数组 普通数组转json数组
1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行 ...
- Mysql导入导出非常慢解决办法
MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSER ...
- centos 安装mongodb
原文引用:http://blog.chinaunix.net/uid-24250828-id-3770298.html 官方网站: http://www.mongodb.org/ MongoDB 安裝 ...
- Markdown渲染后文章标题收缩控件
文章首发于szhshp的第三边境研究所(szhshp.org), 转载请注明 一个让Markdown-Post的标题拥有Collapse功能的JS 直接把鼠标放在这篇文章下方的header上,点击标题 ...
- BIND的进阶二:视图,日志,转发,子域的授权
实验分为4部分组成: 1:DNS的转发 2:DNS日志 3:子域的授权 4:智能DNS的简单配置根据网段来分配不同的ip地址 一:DNS的转发: 转发方式有两种:only (直接把客户端请 ...