CMDC Test — 集成方 / 第三方 plugin 作者 / cmdc 子库测试 helpers 一站式包。
cmdc 主库自身的 test/support/ 目录在 hex 发布时不会打包,导致 Studio /
Hive 等集成方写 contract test 时各自重写 mock provider / plugin runner /
事件断言族。本子库把这些常见测试基础设施统一发布到 hex.pm,4 大模块:
| 模块 | 用途 |
|---|---|
CMDCTest.MockProvider | Builder 式 mock LLM provider,配合 CMDC.Config.provider_fn 注入 |
CMDCTest.Plugin | run_hook/4 单元测 Plugin;with_mock_plugin/3 macro 集成路径测试 |
CMDCTest.EventCapture | EventBus 订阅 + 收集 |
CMDCTest.Assertions | assert_event_emitted / assert_event_count / refute_event_emitted |
Quick Start
# mix.exs
defp deps do
[
{:cmdc, "~> 0.5"},
{:cmdc_test, "~> 0.1", only: :test}
]
end
# test/my_agent_test.exs
defmodule MyAgentTest do
use ExUnit.Case, async: true
import CMDCTest.Assertions
test "Agent 调用 shell 工具触发 SecurityGuard block_tool" do
provider =
CMDCTest.MockProvider.new()
|> CMDCTest.MockProvider.respond_tool_call("shell", %{"cmd" => "rm -rf /"})
{:ok, session} =
CMDC.create_agent(
model: "mock:test",
config: %{provider_fn: CMDCTest.MockProvider.to_provider_fn(provider)},
plugins: [CMDC.Plugin.Builtin.SecurityGuard]
)
CMDCTest.EventCapture.start_capture(session)
CMDC.prompt(session, "请删根目录")
assert_event_emitted(session, :block_tool, timeout: 500)
end
end详见各子模块 moduledoc。
Summary
Functions
@spec version() :: String.t()
返回 cmdc_test 当前版本号。