Junit mockito解耦合测试
Mock测试是单元测试的重要方法之一。
1、相关网址
项目源码:https://github.com/mockito/mockito
api:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html
2、什么是Mock测试
Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。
Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。
当我们需要测试A类的时候,如果没有 Mock,则我们需要把整个依赖树都构建出来,而使用 Mock 的话就可以将结构分解开,像下面这样:
只需提供mock B 和mock C 的返回即可的,不需要知道其底层具体是怎么实现的。
3、mock使用的场景和好处
- 真实的对象具有不确定的行为,产生不可预测效果。(如:股票行情,天气预报),我们经常会遇到测试的时候需要去数据库中查询某些数据,但是未知的,就算是知道的,假如有一天数据被删除了或者被修改了,很难进行回归测试。
- 真实对象很难被创建的,真实对象的某些行为很难被触发。
- 真实对象实际上还不存在的。如:某个接口依赖其他系统的服务或者该接口还没开发出来。我们就可以使用mock假设其返回的数据进行测试。而不用等待其开发完接口,我们再进行测试。提高开发的效率
4、一些特点
- 可以 mock 具体类而不单止是接口
- 一点注解语法糖 - @Mock
- 干净的验证错误是 - 点击堆栈跟踪,看看在测试中的失败验证;点击异常的原因来导航到代码中的实际互动。堆栈跟踪总是干干净净。
- 允许灵活有序的验证(例如:你任意有序 verify ,而不是每一个单独的交互)
- 支持“详细的用户号码的时间”以及“至少一 次”验证 <
