用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 ...
随机推荐
- App的启动过程
App的启动过程 所有的app都是通过launcher去启动的 launcher自己也是一个app,一个系统级别的app,放在asystem/app/下,使用系统签名. 对代码进行分析
- 【java基础】 合并两个类型相同的list
将两个类型相同的list合并,可以用 addAll(Collection<? extends E> c) import java.util.ArrayList; import java.u ...
- jquery TypeError: $(...).live is not a functio,动态添加class的点击事件处理
jq版本更新后无live函数的处理.TypeError: $(...).live is not a function jquery live函数语法 jquery版本更新, 发现一个问题: jq自带的 ...
- Java 文本文件 读写
Use File/FileInputStream/FileOutputStream. public void testWithFIS() throws IOException{ File file=n ...
- 2016年12月31日 学习java 第一天
6个月没写代码了 现在从头开是学 又遇到了很基础的问题 以前配环境变量的时候 配过classpath 其实不要配classpath 因为运行的时候会优先去classpath去找 class文件 ...
- 《开源安全运维平台:OSSIM最佳实践》内容简介
<开源安全运维平台:OSSIM最佳实践 > 李晨光 著 清华大学出版社出版 内 容 简 介在传统的异构网络环境中,运维人员往往利用各种复杂的监管工具来管理网络,由于缺乏一种集成安全运维平台 ...
- 理解HTTP和HTTPS的区别
原问转载于https://www.mysubmail.com/chs/blog/view/47 这两天闲来无事,在网上看了一下,发现 HTTP 和 HTTPS 的区别很受关注,多位大牛做了很详细的阐述 ...
- R语言基础
一.扩展包的基本操作语句R安装好之后,默认自带了"stats" "graphics" "grDevices" "utils&qu ...
- 机器学习实战knn
最近在学习这本书,按照书上的实例编写了knn.py的文件,使用canopy进行编辑,用shell交互时发现运行时报错: >>> kNN.classify0([0,0],group,l ...
- JS学习笔记01
文章转载pigpigpig4587 的 1.Javascript是区分大小写的语言.也就是说.关键字.变量,函数和所有的标识符都必须采取一致的大小写形式.因为html不严格区分大小写,所以在html中 ...