什么是mock ?
mock在翻译过来是模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许你用模拟对象来替换你的系统的部分,并对它们已使用的方式进行断言。
什么意思呢?说的直白些,我们要测试一个模块(类、方法或接口),但是这个模块还没有实现,或者它属于第三方模块,真的去调用会比较麻烦,这个时候就可以借助 mock 技术,给该模块设置预期结果。
可能你和我一样会有疑问,把要测试的模块都mock掉了,这不是自己骗自己嘛,那我们还测什么?
但是,在实际生产中的项目是非常复杂的,对其进行单元测试的时候,会遇到以下问题:
接口的依赖
外部接口调用
测试环境非常复杂
单元测试应该只针对当前单元进行测试, 所有的内部或外部的依赖应该是稳定的, 已经在别处进行测试过的.使用mock 就可以对外部依赖组件实现进行模拟并且替换掉,从而使得单元测试将焦点只放在当前的单元功能。
mock技术的目的和作用就是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。
什么是 Mockito ?
官方网站:http://site.mockito.org/
Tasty mocking framework for unit tests in Java
优雅的mock框架用于Java的单元测试。
GitHub 地址:https://github.com/mockito/mockito
安装 Mockito
以 Maven 方式安装为例。
org.mockito mockito-all 2.0.2-beta test
因为 Mockito是其于单元测试的框架,所以,接下来的练习最好在单元框架框架下运行,通过 Maven 配置 JUnit 单元测试框架。
junit junit 4.12 test
mock 一个List,因为大家都知道它的接口(例如add(),get(), clear())。不要mock一个真实的List类型,使用一个真实的实例来替代。
验证某些行为
例子:
import org.junit.Test;import java.util.List; // 静态导入会使代码更简洁import static org.mockito.Mockito.*;public class MockitoDemo { @Test public void verify_behaviour() { // mock creation 创建mock对象 List mockedList = mock(List.class); //using mock object 使用mock对象 mockedList.add("one"); mockedList.clear(); //verification 验证 verify(mockedList).add("one"); verify(mockedList).clear(); }}
一旦mock对象被创建了,mock对象会记住所有的交互。然后你就可能选择性的验证你感兴趣的交互。
作者:西边人
程序爬虫获取国内外测试资源分享给自学爱好者
公众号、今日头条(软件测试资源站)作者
关注后回复测试资料,打包资料下载。
自学联盟爱好者QQ群:330374464
网友评论