上面的例子是很理想化的状态,但是在实际的开发中,我们需要经常调用一些依赖特定环境的函数或者调用同事写的代码,而同事仅提供了接口。这个时候就需要利用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

最新文章

  1. .net core ClaimsPrincipal Class
  2. 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)
  3. opencv的问题
  4. Leetcode 270. Closest Binary Search Tree Value
  5. 异步框架asyn4j的原理
  6. IOS横竖屏控制与事件处理
  7. 【linux操作命令】vim
  8. 使用Common.Logging+log4net规范日志管理
  9. hadoop 学习
  10. Business Intelligence(BI) 商务智能
  11. TCP服务通讯
  12. zoj3211dream city dp 斜率
  13. K-Means 聚类
  14. 运算符优先级--C
  15. 学号 20175201张驰 《Java程序设计》第5周学习总结
  16. Tor真的匿名和安全吗?——如果是http数据,则在出口节点容易被嗅探明文流量,这就是根本问题
  17. JS基础(一)dom小实例
  18. hdu1024线性dp
  19. Excel lastindex of a substring
  20. Redis-五种数据类型解析

热门文章

  1. App开发(Android与php接口)之:短信验证码
  2. Hibernate 简介
  3. web开发必备插件
  4. nginx.conf 解释
  5. select distinct
  6. Appium之python API
  7. android模拟器genymotion安装virtualbox不能为虚拟电脑启动一个新任务
  8. AR/VR技术交流
  9. HTML5 <input>添加多张图片,可点击弹窗放大。限定4张,可删除。
  10. [转]CSS hack大全&详解