文章目录
  1. 1. 介绍
  2. 2. 用途
  3. 3. 特性
  4. 4. 两个明显优势
  5. 5. 两种用法
    1. 5.1. API
    2. 5.2. Standalone
  6. 6. 提供的服务
    1. 6.1. Request
    2. 6.2. Response
    3. 6.3. Mount
    4. 6.4. Template(Beta)
    5. 6.5. Event
    6. 6.6. Verify
    7. 6.7. Port
    8. 6.8. Log
    9. 6.9. Glabal Setting
  7. 7. 应用实例
  8. 8. 参考

介绍

Moco是一个简单搭建stub的框架,主要用于测试和集成。这个框架的开发灵感来自Mock框架,如Mockito和Playframework。目前最新版本是0.9.1。

用途

集成,尤其是基于HTTP协议的集成——web service,REST等,在我们的项目开发中被广泛应用。

以前,我们每次都要往Jetty或Tomcat等应用服务器上部署一个新的WAR。大家都知道,开发部署一个WAR的过程是很枯燥的,即使在嵌入式服务器上也是如此。而且,每次我们做一点改动,整个WAR都要重新组装。

Moco的出现,正是为了解决这些问题。开发团队只要根据自己的需要进行相应的配置,就会很方便得到一个模拟服务器。而且,由于Moco本身的灵活性,其用途已经不再局限于最初的集成测试,比如,Moco可以用于移动开发,模拟尚未开发的服务;Moco还可以用于前端开发,模拟一个完整的Web服务器,等等。

特性

  1. 基于Java开发、用来简单搭建模拟服务器的程序库
  2. MOCO的API设计采用了内部 Domain Specific Language (DSL)的 方式,提升了代码的可读性。
  3. 采用函数式编程,可以大幅度提升Java代码之间的灵活度,减少对特定API的依赖,让用户来决定怎样使用这个API,缩减代码的编写量。
  4. 将新的Java编程风格融入其中、并不断加入新的功能来满足更多企业项目需求。

两个明显优势

  1. 提供DSL,可以非常直白地表现目的
  2. 启动速度非常快,无需漫长的等待

两种用法

API

在集成的框架(比如JUnit、JBehave等)里面直接用,这个代码与Java很紧密的绑定在一起,极大程度地降低了集成测试点的复杂度。

Standalone

称之为独立运行的服务器的用法,这种用法只要你提供一个配置文件,然后你在命令行里把它用起来。至于我访问它的是一个Java的客户端,还是访问的是一个.NET的客户端,或者是用Ruby等这些东西没有关系。这里面只是一个独立的服务,现在客户端到底是什么样的,跟这个服务之间没有任何的关系。

提供的服务

Request

  1. Content(可以放于file中,如果content过长)
  2. URI
  3. Query parameter
  4. HTTP method
  5. Version
  6. Header
  7. Cookie
  8. Form
  9. XML/XPath
  10. JSON/JSONPath
  11. Operator:match、startsWith、exist、endsWith、contain、and、or

Response

  1. Content(可以返回json)
  2. Status Code
  3. Version
  4. Header
  5. Proxy:返回特定的url
  6. Failover:优先访问远程服务器(Request/Response会保存在本地),远程不可用时,访问本地内容。
  7. playback:当本地内容可用时,不再访问远程服务器。本地优先。
  8. Batch URLs:对proxy的批处理方法,可以一次性处理一组URL
  9. Redirect
  10. Cookie
  11. Latency
  12. Sequence

Mount

将一个目录下符合设定的所有文件挂到一个特定的URI下。

Template(Beta)

  1. Version
  2. Method
  3. Content
  4. Header
  5. Query
  6. Form
  7. Cookie
  8. Custom Variable

Event

事件指的是,在某种情况下,触发相应的处理。目前支持的事件是“完成”事件,也就是说,当一个请求处理完成时,我们可以做相应的处理。

  1. Complete
  2. Asynchronous

Verify

目前支持的验证条件包括:

never: 没有收到这样的请求。
time: 准确匹配收到这些次数的请求。
atLeast:至少收到这些次数的请求。
atMost:至多收到这些次数的请求

Port

Log

Glabal Setting

  1. 多个配置文件集成到一个文件中
  2. 可以配置Context、FileRoot、Environment、Glabal Response.

应用实例

  1. 集成测试
  2. 移动端
  3. web前端:mount加载静态js文件

参考

  1. Github项目地址
  2. 创始人郑晔Blog
文章目录
  1. 1. 介绍
  2. 2. 用途
  3. 3. 特性
  4. 4. 两个明显优势
  5. 5. 两种用法
    1. 5.1. API
    2. 5.2. Standalone
  6. 6. 提供的服务
    1. 6.1. Request
    2. 6.2. Response
    3. 6.3. Mount
    4. 6.4. Template(Beta)
    5. 6.5. Event
    6. 6.6. Verify
    7. 6.7. Port
    8. 6.8. Log
    9. 6.9. Glabal Setting
  7. 7. 应用实例
  8. 8. 参考