蜂箱试验
基于共享属性的测试库 蜂巢 生态系统。
提供可重复使用 发电机, 属性宏和a Kaocha MCP适配器 因此,hive项目可以编写属性测试,而无需复制生成器定义。
安装
添加到您的 deps.edn :test 别名:
io.github.hive-agi/hive-test
{:git/tag "v0.1.1" :git/sha "99a66ad"}生成器
hive-test.generators.core
所有域中使用的通用标量生成器。
| 发电机 | 输出 |
|---|---|
gen-non-blank-string | 非空字母数字字符串 |
gen-keyword-ns | 命名空间关键字(:foo/bar) |
gen-uuid-str | UUID字符串 |
gen-timestamp | ISO-8601时间戳字符串 |
gen-project-id | "project-" |
gen-agent-id | "agent:" |
hive-test.generators.result
DSL结果生成器(ok/err 一元型)。 由构造函数fns参数化 以避免耦合到任何特定的Result实现。
(require '[hive-test.generators.result :as gen-r]
'[my-project.result :as r])
;; Pass your constructors at the call site
(gen-r/gen-ok r/ok) ; -> Generator}>
(gen-r/gen-err r/err) ; -> Generator}>
(gen-r/gen-result r/ok r/err) ; -> Generator
(gen-r/gen-result-fn r/ok r/err) ; -> Generator Result)>
(gen-r/gen-plain-fn) ; -> Generator b)>
(gen-r/gen-err-with-extras) ; -> Generator ...extras}>
;; Also available as plain defs
gen-r/gen-err-category ; -> Generator
gen-r/gen-ok-value ; -> gen/any-printablehive-test.generators.kg
知识图边、节点和关系的生成器。
(require '[hive-test.generators.kg :as gen-kg])
gen-kg/gen-node-id ; -> "node-"
gen-kg/gen-relation ; -> :implements, :refines, etc.
gen-kg/gen-confidence ; -> double in [0.0, 1.0]
gen-kg/gen-invalid-confidence ; -> double outside [0.0, 1.0]
gen-kg/gen-source-type ; -> :manual, :automated, :inferred, :co-access
gen-kg/gen-delta ; -> double in [-2.0, 2.0]
gen-kg/gen-edge-params ; -> {:from, :to, :relation, :confidence}
gen-kg/gen-edge-params-full ; -> above + :scope, :source-type, :created-byhive-test.generators.memory
配置单元内存条目的生成器。
(require '[hive-test.generators.memory :as gen-mem])
gen-mem/gen-memory-type ; -> :axiom, :decision, :note, etc.
gen-mem/gen-duration ; -> :ephemeral, :short, :medium, :long, :permanent
gen-mem/gen-tags ; -> ["tag-foo" "tag-bar"]
gen-mem/gen-memory-entry ; -> {:type, :content, :tags, :duration}
gen-mem/gen-memory-entry-full ; -> above + :scope, :agent-id属性宏
hive-test.properties 提供可扩展为 defspec 形式,减少常见代数性质的样板。
(require '[hive-test.properties :as props])defprops-monad
生成三个defspec来验证monad定律(左身份、右身份、结合性):
(props/defprops-monad "result-monad"
gen/any-printable ; gen-val
(gen-r/gen-result-fn r/ok r/err) ; gen-fn
r/bind ; bind-fn
r/ok) ; unit-fn
;; Expands to: result-monad-left-identity, result-monad-right-identity, result-monad-associativitydefprop-total
验证函数从不抛出任何有效输入:
(props/defprop-total p1-ok-totality r/ok gen/any-printable {:pred r/ok?})defprop-complement
验证两个谓词是否为精确补语((not= (p x) (q x)) 对于所有x):
(props/defprop-complement p6 r/ok? r/err? (gen-r/gen-result r/ok r/err))defprop-roundtrip
验证 (decode (encode x)) = x:
(props/defprop-roundtrip json-roundtrip json/encode json/decode gen-value)defprop-idempotent
验证 f(f(x)) = f(x):
(props/defprop-idempotent normalize-idempotent normalize gen-input)defprop-fsm-terminates
验证FSM是否始终在周转预算内达到终端状态:
(props/defprop-fsm-terminates drone-fsm run-drone gen-drone-inputs 50)Kaocha MCP适配器
一个stdio JSON-RPC服务器,将Kaocha测试执行作为MCP工具公开。通过Babashka跑步:
bb -m hive-test.mcp.server工具
| 工具 | 说明 |
|---|---|
test/run | 通过nREPL(命名空间或测试ID筛选)运行测试 |
test/status | 获取通过/失败计数和测试健康状况 |
test/failures | 获取详细的故障信息 |
test/watch-start | 启动自动测试的文件监视器 .clj 变化 |
test/watch-stop | 停止文件监视器 |
发展
# Start dev REPL
clj -A:dev
# Run tests
clj -A:test许可证
麻省理工学院-见 许可证.
