Mock 适配器
约 519 字大约 2 分钟
2026-03-19
Mock 适配器使用指南 — 用于插件集成测试的内存适配器,无需网络连接。
Quick Reference
| 属性 | 值 |
|---|---|
| 适配器名称 | mock |
| 平台标识 | mock(可自定义) |
| 协议 | 内存模拟 |
| 类 | MockAdapter |
| 导入 | from ncatbot.adapter import MockAdapter |
概述
Mock 适配器不连接任何外部服务,完全在内存中运行。它的主要用途是:
- 插件集成测试:注入模拟事件,验证插件行为
- API 调用验证:记录所有 API 调用,断言调用参数和次数
- 无网络开发:不需要运行 NapCat 或其他外部服务
基本用法
from ncatbot.app import BotClient
from ncatbot.adapter import MockAdapter
adapter = MockAdapter()
bot = BotClient(adapter=adapter)
# 启动后注入事件
await adapter.inject_event(some_event_data)
# 检查 API 调用
assert adapter.mock_api.called("send_group_msg")
# 停止
adapter.stop()自定义平台标识
Mock 适配器的 platform 可以自定义,模拟不同平台的事件:
adapter = MockAdapter(platform="qq") # 模拟 QQ 平台
adapter = MockAdapter(platform="bilibili") # 模拟 Bilibili 平台MockBotAPI
MockBotAPI 实现了 IQQAPIClient 接口,所有 API 方法均可调用但不会发送网络请求。API 调用会被记录,可用于断言。
断言方法
| 方法 | 签名 | 说明 |
|---|---|---|
called | (action) → bool | 检查 action 是否被调用过 |
call_count | (action) → int | 获取调用次数 |
get_calls | (action) → List[APICall] | 获取指定 action 的所有调用记录 |
last_call | (action=None) → Optional[APICall] | 获取最后一次调用 |
set_response | (action, response) → None | 为指定 action 预设返回值 |
reset | () → None | 清除所有记录和预设 |
示例
# 预设 API 返回值
adapter.mock_api.set_response("send_group_msg", {"message_id": 12345})
# 触发插件逻辑(注入事件)
await adapter.inject_event(event_data)
# 验证 API 被调用
assert adapter.mock_api.called("send_group_msg")
assert adapter.mock_api.call_count("send_group_msg") == 1
# 检查调用参数
call = adapter.mock_api.last_call("send_group_msg")
assert call.params["group_id"] == 123456与 TestHarness 的关系
TestHarness 和 PluginTestHarness 内部使用 MockAdapter。如果你使用测试框架,通常不需要直接操作 MockAdapter:
from ncatbot.testing import PluginTestHarness
async with PluginTestHarness(MyPlugin) as harness:
await harness.send_group_message("hello", group_id=123)
harness.assert_replied("Hello!")直接使用 MockAdapter 适合需要更底层控制的测试场景。
延伸阅读
- 插件测试指南 → testing/
- 适配器接口参考(含 MockAdapter API)→ reference/adapter/
- TestHarness 详解 → testing/2.harness.md
版权所有
版权归属:huan-yp
