文章目录

  • 前言
  • 依赖及注解
  • mock local variable
  • mock static
  • mock final class / method
  • mock constructors
  • mock private methods

前言

注:本文总结源自汪文君的e-book 《PowerMock 实战手册》, pdf不知道为何导入不了,以下是随书笔记。

pdf我保存在了百度云里,需要的可以自取
《PowerMock实战手册》
链接: 密码: 6hm4

本文目的:通过强大的 mock 编写出更好的测试用例,帮助实现 Free Bug

前提:具备 mockito 的语法基础,如果不懂,请移步:
mockito官网文档
mock 基本套路:

  • 创建 mock 对象
  • 模拟 mock 行为
  • 调用待测试方法
  • 验证 mock 行为(确认 mock 部分被成功模拟)

github文档
参考书籍:《Instant Mock Testing with PowerMock》

TDD框架我一般用Mockito,但是只要稍用一段时间就会发现它在实际项目中有很多解决不了的事情,因此出现了PowerMock,
专治各种不服static / constructor / final / private / local variable

补充:如果每次遇到这些代码都选择注释,测起来非常麻烦,还是尽量能嵌入项目中,运用更强大的 mock,但实际项目中很可能还没这么简单嵌入,之后实际工作中总结了经验再来补充。
另外,这些知识,看看就好,写点 demo,真正用到的时候再完整的来两遍,就会了,主要是会基本 demo,并且在工作测试的时候用到了能想到来这里查找和运用测试方法,让测试更简单。根据使用频率,决定自己相关需要使用的技术需要熟练到什么程度即可,大可把它们当做参考手册对待,不必牢记于心,网上用例一搜一大把。

依赖及注解

https://mvnrepository.com/

  • powermock-module-junit4
  • powermock-api-mockito
    找到以上依赖(版本不一样可能会出现意想不到的问题),引入到本地的 pom 文件中

以下两个注解在测试 mockito 无法测试的内容时必须的,标注在待测试类上
@RunWith(PowerMockRunner.class)
告诉 junit 使用某个指定 Runner 运行 testCase ,不指定默认用 junit 的 Runner
@PrepareForTest(EmployeeService.class)
为 PowerMock 的 Runner 提前准备一个已经根据某种预期改变过的 class,如需添加更多,改成类似这种即可:@PrepareForTest({EmployeeService.class, EmployeeUtils.class})

mock local variable

  • 有返回值
public class EmployeeService {public int getTotalEmployee() {EmployeeDao employeeDao = new EmployeeDao();return employeeDao.getTotal();}
}
@Test
public void testGetTotalEmployeeWithLocalVariable() {EmployeeDao employeeDao = PowerMockito.mock(EmployeeDao.class);try {PowerMockito.whenNew(EmployeeDao.class).withNoArguments().thenReturn(employeeDao);} catch (Exception e) {Assert.fail("测试失败.");}PowerMockito.when(employeeDao.getTotal()).thenReturn(10);EmployeeService service = new EmployeeService();int totalEmployee = service.getTotalEmployee();assertEquals(totalEmployee, 10);
}
  • 无返回值
    只能用 mock 的 verify 判断是否被调用

mock static

  • 有返回值
@Test
public void testGetEmployeeCountWithMock() {PowerMockito.mockStatic(EmployeeUtils.class);PowerMockito.when(EmployeeUtils.getEmployeeCount()).thenReturn(10);final EmployeeService employeeService = new EmployeeService();int count = employeeService.getEmployeeCount();assertEquals(10, count);
}
  • 无返回值
@Test
public void testCreateEmployeeWithMock() {PowerMockito.mockStatic(EmployeeUtils.class);Employee employee = new Employee();PowerMockito.doNothing().when(EmployeeUtils.class);final EmployeeService employeeService = new EmployeeService();employeeService.createEmployee(employee);PowerMockito.verifyStatic();
}

mock final class / method

同上

mock constructors

  • 有参构造
    whenNew(EmployeeDao.class).withArguments(false, MYSQL).thenReturn(employeeDao);

参数匹配器
包含请求和回答参数,还是参考这里
mockito官网文档
PowerMockito.when(employeeService.xxx).then(new Answer() {
@override
public String answer(InvocationOnMock invocation) throws Throwable {
…分支
}
})

spy:只mock 一个对象的个别方法行为,保留对某些方法原始的业务逻辑

mock private methods

public class EmployeeService {private void checkExist(String userName) {throw new UnsupportedOperationException();}
}
PowerMockito.doNothing().when(employeeService, "checkExist", "wangwenjun");employeeService.checkExist("wangwenjun");PowerMockito.verifyPrivate(employeeService).invoke("checkExist","wan gwenjun");

《PowerMock实战手册》读书笔记及个人总结相关推荐

  1. 《Spring实战》读书笔记--SpringMVC之forward与redirect

    <Spring实战>读书笔记--SpringMVC之forward与redirect 1.forward与redirect介绍 1.1 redirect 重定向,服务器收到请求后发送一个状 ...

  2. 《Apache Kafka实战》读书笔记-调优Kafka集群

    <Apache Kafka实战>读书笔记-调优Kafka集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.确定调优目标 1>.常见的非功能性要求 一.性能( ...

  3. 《Apache Kafka 实战》读书笔记-认识Apache Kafka

    <Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...

  4. 11月3日云栖精选夜读:《maven实战》读书笔记2——maven安装(windows和eclipse插件)...

    前言 由于我的工作中开发环境就是windows,IDE是eclipse,因此安装也只涉及和记录这两部分,在看书和动手的过程也就直接跳过其他部分. 笔记 windows中maven的安装 安装条件 ma ...

  5. 《看板实战》读书笔记 XMIND版本

    <看板实战>读书笔记

  6. 《Spring实战》读书笔记-第4章 面向切面的Spring

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  7. 《Spring实战》读书笔记-第3章 高级装配

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  8. 《Java8实战》读书笔记06:Parallel Stream 并行流

    <Java8实战>读书笔记06:Parallel Stream 并行流 第7章 并行数据处理与性能 7.1 并行流 7.1.1 将顺序流转换为并行流 7.1.2 测量流性能 7.1.3 正 ...

  9. 《Java8实战》读书笔记10:组合式异步编程 CompletableFuture

    <Java8实战>读书笔记10:组合式异步编程 CompletableFuture 第11章 CompletableFuture:组合式异步编程 11.1 Future 接口 (只是个引子 ...

  10. 《推荐系统实战》读书笔记

    <推荐系统实战>读书笔记 1.亚马逊允许用户禁用推荐理由,只要是出于隐私的考虑: 2.提供用户对推荐结果的反馈方式:加入到购物车.加入到心愿单.给书打分.我已经拥有.对内容没兴趣: 一.推 ...

最新文章

  1. 调用Win32 API 之CreateCursor函数失败
  2. 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?
  3. 那些没有兴趣花必要的C++时间
  4. 2017-2018-1 20179202《Linux内核原理与分析》第四周作业
  5. 怎样控制小程序tabbar图标大小_微信小程序设计规范经验分享
  6. C++ OpenCV 开发笔记整理分类合集【所有的相关记录,都整理在此】
  7. SpringBoot整合JavaMail---发送邮件
  8. java dbutils_Java学习之DBUtils
  9. ubuntu固定内网ip_Ubuntu14设置局域网固定IP
  10. 气体涡轮流量计和涡街流量计的区别
  11. ValueError: Error initializing torch.distributed using tcp:// rendezvous: port number missing
  12. linux系统下 usb网卡的驱动安装
  13. android共享局域网打印,Android 浅谈同一局域网下使用WiFi连接打印机
  14. 《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择
  15. MOOS程序解析记录(4)
  16. ORA-00392 ORA-00312 错误处理
  17. Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试
  18. Java后台相关知识盘点(持续更新中)
  19. 自动驾驶仿真:VTD建立多个Fisheye模型
  20. SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一)...

热门文章

  1. 联合密度函数求期望_已知(X,Y)的联合概率密度,分别求X,Y的期望、方差
  2. 中科院计算所培训中心新一期javascript培训结束
  3. Linux网络下载管理工具(lftp, ftp, lftpget, wget)
  4. android中的imagebutton,Android:以编程方式在ImageButton中设置图像的填充
  5. 怎么修改数据库服务器名字,如何更改数据库服务器名字
  6. python模拟账号登录_用Python(Tornado)模拟登录小米帐号
  7. 啦啦外卖独立版41.7全开源小程序app全套源码带vue源码
  8. Google Chrome谷歌浏览器中安装JsonView插件实现json数据转码、缩进、格式化的方法
  9. Java项目:淘淘商城
  10. 各省简称 拼音 缩写_全国所有城市拼音跟缩写.docx