博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单元测试——隔离神器:mockito
阅读量:4479 次
发布时间:2019-06-08

本文共 1397 字,大约阅读时间需要 4 分钟。

mockito,一个让人着迷的单元测试隔离框架。对比了easymock,jmock,jmockito,最终选择了它。

为什么用他

  1. 接口语法简洁、自然。写起来像在说话,很舒服。
  2. 文档更完整。让学习曲线更简单。
  3. 可以进行参数化。在很多情况下,不想关心具体的参数是什么。
  4. mock的思路更舒服。废弃了陈旧的“录制——重放”的方法,使用的“期望——执行——断言”更自然的方法。

他能解决什么问题

  1. 可以mock接口。
  2. 可以破除不可控制的依赖。主要体现在:数据库、文件系统、http(特别是在和第三方接口对接时)等。
  3. 模拟异常。

使用场景

mock接口

Comparable c = mock(Comparable.class);when(c.compareTo("Test")).thenReturn(1);assertEquals(1, c.compareTo("Test"));

不关注参数

Comparable c = mock(Comparable.class);//一旦使用anyXxx()系列,所有的方法参数都必须`全部`使用anyXxx()。when(c.compareTo(anyString())).thenReturn(1);assertEquals(1, c.compareTo("Test"));

破除不可控制的依赖

HttpServletRequest successRequest =mock(HttpServletRequest.class);when(successRequest.getAttribute("status")).thenReturn("200");OrderEntity order = finish(successRequest);assertTrue(order.isOk());

模拟异常

OutputStream osMock = mock(OutputStream.class);OutputStreamWriter osw = new OutputStreamWriter(osMock);/* * 因为close()方法的返回值是void,所以只能用这只格式 * 如果返回值不是void,也可以使用when(someMethod()).thenThrow(new Exception()); */doThrow(IOException.class).when(osMock).close();osw.close();

更简洁的mock

通过注解Mock

@Mockprivate Iterator i;@BeforeClasspublic void init() {    //这个是必须的。    MockitoAnnotations.initMocks(this);}@Testpublic void annotationMock() {    when(i.next()).thenReturn(1);    assertEquals(1, i.next());}

限制

对于final类、匿名类和Java的基本类型是无法进行mock。不过可以使用powerMock扩展。但是正常情况下是不需要的,除非对历史代码的单元测试

参考资源

转载于:https://www.cnblogs.com/ansn001/p/4939518.html

你可能感兴趣的文章
十、Shell基础
查看>>
py16 面向对象深入
查看>>
CentOS 7 安装 Gitlab
查看>>
JavaScript-03-常见函数
查看>>
ajax 设置Access-Control-Allow-Origin实现跨域访问
查看>>
去掉ExpandableListView的箭头图标
查看>>
[LeetCode]Binary Tree Level Order Traversal II
查看>>
跨页面传值自动刷新 操作文本与文件夹
查看>>
最完美的毁尸灭迹:皮箱连环弃尸案始末
查看>>
002
查看>>
WCF服务“*”有零个应用程序(非基础结构)终结点。这可能是因为未找到应用程序的配置文件,或者在配置文件中未找到与服务名称匹配的服务元素,或者服务元素中未定义终结点。...
查看>>
cocos2d 读书随笔《cocos2d-x游戏开发技术精讲》
查看>>
Asterisk 代码架构概述
查看>>
中兴电信光纤猫F450获取管理员密码方法
查看>>
申请TexturePacker 或 PhysicsEditor free licenses
查看>>
kafka启动报错&问题解决
查看>>
nginx反向代理下没有获取到正确的clientIP问题发散
查看>>
python周报第一周
查看>>
IBM MQ 创建以及常见问题集锦
查看>>
Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(1)
查看>>