CMDCTest (cmdc_test v0.1.0)

Copy Markdown View Source

CMDC Test — 集成方 / 第三方 plugin 作者 / cmdc 子库测试 helpers 一站式包。

cmdc 主库自身的 test/support/ 目录在 hex 发布时不会打包,导致 Studio / Hive 等集成方写 contract test 时各自重写 mock provider / plugin runner / 事件断言族。本子库把这些常见测试基础设施统一发布到 hex.pm,4 大模块

模块用途
CMDCTest.MockProviderBuilder 式 mock LLM provider,配合 CMDC.Config.provider_fn 注入
CMDCTest.Pluginrun_hook/4 单元测 Plugin;with_mock_plugin/3 macro 集成路径测试
CMDCTest.EventCaptureEventBus 订阅 + 收集
CMDCTest.Assertionsassert_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

返回 cmdc_test 当前版本号。

Functions

version()

@spec version() :: String.t()

返回 cmdc_test 当前版本号。