分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程
什么是Mock Server?
Mock测试:就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
Mock对象:使用Mock Object进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象)从而使测试顺利进行的工具。
为什么要用Mock?
- Mock本意就是模拟或者效仿。我们可以把Mock理解为一个替身,在软件开发领域,通常就是指模拟对象。
- Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。
如何选择Mock Server?
- EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
- JMock 是一个使用模拟对象机制测试Java代码的开发包。模拟对象(Mock Object)可以取代真实对象的位置,用于测试一些与真实对象进行交互或依赖于真实对象的功能,模拟对象的背后目的就是创建一个轻量级的、可控制的对象来代替测试中需要的真实对象,模拟真实对象的行为和功能,方便我们的测试。JMock就是这种机制的实现,使用JMock我们可以快速创建模拟对象,定义交互过程中的约束条件等,同时JMock也是易扩展的,你可以很方便添加自定义的需求。
- Mockito 无需准备昂贵的前期启动。他们的目标是透明的,让开发人员专注于测试选定的行为。Mockito 拥有非常少的 API,所有开始使用 Mockito,几乎没有时间成本。因为只有一种创造 mock 的方式。只要记住,在执行前 stub,而后在交互中验证。你很快就会发现这样 TDD Java 代码是多么自然。
为什么用Moco?
- 满足大多数应用场景
- 简单高效,采用Stub code的方式
- 支持HTTP REST Socket等协议,支持API和独立运行两种方式,可以植入单元测试中
- 代码开源(https://github.com/dreamhead/moco)
- 支持Maven Scala Shell Gradle等集成
使用过程中遇到的问题?
1、Post类型请求,转发到Moco server后返回400状态码
【解决方案】Post请求response返回格式有json格式、forms格式,PC商城需要用forms格式。
2、Moco 接收C端请求时,匹配reqeust参数,为全匹配,如果不写则不会匹配参数?
【使用场景】当接口请求中带有时间戳时,如图所示:
配置Moco时,需要将这个参数在配置文件中去掉即可,如图所示:
3、Moco server配置文件match uri字段无法正确匹配
【解决方案】可以使用contain关键字进行代替使用match参数。
4、页面返回文件为XML, 直接访问地址返回一下错误,如图所示:
【问题分析】通过Fiddler抓包查看请求,Moco Server已经返回了对应的XML文件,但是浏览器还是依然报错,如图所示:
【问题根源】 返回的文件就是一个文本,未指定其格式,所以会提示上述错误,服务器给出提示,如图所示:
【解决方案】 指定返回文件的格式即可,如图所示: