扫一扫分享
在开发过程中,我们的代码经常要调用别人的服务(比如支付接口、天气查询、用户中心)。但现实往往是:
对方的服务还在开发中,没部署好
对方的服务不稳定,时不时挂掉
调用真实服务要钱(比如短信接口)
网络环境不通,连不上
Moco 就是用来解决这个问题的:你配一个假的接口,让它返回你想要的假数据,然后你的代码去调这个假接口。等真实服务好了,再把地址换回去就行。
Moco 的使用方式非常简单,最经典的是通过 JSON 配置文件启动。
1. 下载一个 Jar 包
去 GitHub 的 Releases 页面下载 moco-runner-<version>-standalone.jar 这个文件。
2. 写一个配置文件
创建一个 foo.json 文件,内容如下:
[
{
"response" : {
"text" : "Hello, Moco"
}
}
]这个配置的意思是:不管请求是什么,都返回 "Hello, Moco" 这个字符串。
3. 启动服务器
java -jar moco-runner-1.6.0-standalone.jar http -p 12306 -c foo.json这行命令的意思是:启动一个 HTTP 服务,监听 12306 端口,用刚才写的 foo.json 作为配置。
4. 访问试试
打开浏览器,访问 http://localhost:12306,你会看到页面上显示 "Hello, Moco"。
就这么简单。后端服务还没好?先用 Moco 顶上去,前端开发和调试可以照常进行。
1. 匹配请求,返回相应应答
不只是“不管什么请求都返回同样内容”,你可以配置得更精细:
[
{
"request" : {
"uri" : "/user",
"method" : "GET"
},
"response" : {
"json" : {
"name" : "张三",
"age" : 28
}
}
},
{
"request" : {
"uri" : "/user",
"method" : "POST",
"text" : "{\"name\":\"李四\"}"
},
"response" : {
"text" : "创建成功"
}
}
]当请求 /user 且方法是 GET,返回一个 JSON 对象。
当请求 /user 且方法是 POST,并且请求体内容是 {"name":"李四"},返回 "创建成功"。
2. 模拟特殊场景
比如模拟一个很慢的接口,用来测试你代码的超时处理:
{
"request" : {
"uri" : "/slow-api"
},
"response" : {
"text" : "终于返回了",
"delay" : 5000
}
}延迟 5000 毫秒(5秒)后才返回响应。
3. 转发请求
把请求转发到另一个真实的服务器,相当于一个中转站:
{
"request" : {
"uri" : "/proxy"
},
"response" : {
"proxy" : "http://real-server.com/api"
}
}当你访问 Moco 的 /proxy 时,它会把请求转发到 http://real-server.com/api,然后把对方的响应返回给你。
4. 异步调用
模拟 A 请求触发一个后台任务,然后去调用 B 接口的场景。
5. 文件挂载
模拟一个静态文件服务器,给前端开发用:
{
"request" : {
"uri" : "/file"
},
"response" : {
"file" : "path/to/your/file.html"
}
}6. 单元测试验证
在写单元测试时,可以用 Moco 来模拟外部依赖,并且校验你的代码是否真的发出了正确的请求(比如检查请求参数对不对)。
2026年4月20日发布的 v1.6.0 版本,增加了对 SSE (Server-Sent Events) 的支持。这是随着 LLM(大语言模型)兴起而越来越常用的技术,用于服务端向客户端流式推送数据,比如 AI 聊天里的逐字输出。
模拟 LLM 逐字输出:
{
"request" : {
"uri" : "/chat"
},
"response" : {
"sse" : [
{ "event": "message", "data": "你好", "delay": 50 },
{ "event": "message", "data": ",我是", "delay": 50 },
{ "event": "message", "data": "Moco", "delay": 50 }
]
}
}当你访问 /chat 时,Moco 会每隔 50 毫秒推送一个字,模拟出 AI 逐字输出的效果。
SSE 代理:也可以把真实服务的 SSE 流转发到本地,方便调试。
1. 前后端分离开发
后端接口文档写好了但代码没写完,前端先用 Moco 模拟接口,不阻塞页面开发。
2. 微服务联调
你依赖的 A 服务、B 服务、C 服务不稳定或者环境不通,全部用 Moco 模拟,只测自己的代码。
3. 移动端 App 开发
App 开发时后端 API 还没好,用 Moco 在本地起一个假服务器,App 连 localhost 就能调试。
4. 单元测试 / 集成测试
测试代码里需要调外部接口(支付、短信、第三方登录),用 Moco 模拟这些接口,测试稳定、不花钱、不依赖网络。
5. 模拟异常场景
测试代码的健壮性:接口超时、返回空数据、返回错误码、返回超大响应体……这些在真实环境很难构造,但在 Moco 里配一下就完事。
6. 开发 AI 应用
需要调试 LLM 的流式输出(SSE)逻辑,但又不想每次测试都调真实模型(花钱、慢),用 Moco 模拟逐字输出的效果。
| 工具 | 特点 | 适用场景 |
|---|---|---|
| Moco | 配置简单(JSON/Java API),轻量级,Java 生态 | Java 项目、前后端分离、单元测试 |
| Mock Server | 功能更强大,UI 界面,支持请求录制 | 复杂场景、需要图形界面管理 |
| WireMock | 和 Moco 类似,也是 Java 生态,功能更丰富 | 需要高级匹配、验证、录制功能 |
| Postman Mock | 集成在 Postman 里,云端 | 简单的 API Mock,团队协作 |
| JSON Server | 用 JSON 文件快速生成 REST API,Node.js 生态 | 前端开发、原型验证 |
Moco 的优势是极轻量、配置简单、对 Java 项目友好。一个 jar 包 + 一个 json 文件,几秒钟就能跑起来一个模拟服务器。
Moco 做的事情很单一,但很实在:让你在不依赖真实后端服务的情况下,开发和测试照常进行。
它不是一个“大而全”的产品,但十几年来一直在稳定的迭代,解决了一个很具体的痛点。如果你在 Java 项目里做前后端分离开发、写单元测试、调试微服务,Moco 是一个值得放在工具箱里的家伙。
仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!
手机扫一扫预览