用途:本技能说明如何为使用 bocpy 库的行为导向并发(BOC)代码编写测试。BOC 将工作调度为行为——即所需 cown(并发拥有数据)全部就绪后才运行的被装饰函数;由于行为在工作解释器中异步执行,测试需要专门模式。
主要能力与关键概念:Cown(value) 是并发拥有包装,行为获得对 .value 的独占时序访问;@when(*cowns) 将函数调度为行为,装饰器把函数替换为持有返回值的 Cown,前 N 个参数按位置绑定 N 个 cown,其后每个参数必须带默认值,该默认值在调度时被快照为捕获;quiesce(timeout=None) 阻塞至所有在飞行为完成且不拆除 worker,是读取结果前首选的测试线程屏障;Cown.unwrap() 在静止后返回结果值,或在测试线程上原样重抛行为捕获的异常,若行为仍在飞则抛 RuntimeError;send/receive 跨解释器消息,超时返回 TIMEOUT 哨兵;wait(timeout) 阻塞至全部完成后拆除运行时。
使用方式:测试用 pytest,位于 test/ 目录。安装依赖:pip install -e .[test];运行:pytest -vv。首选模式是 quiesce()+unwrap():@when 立即返回,行为尚未执行,quiesce() 让行为及其链式行为完成,再用 unwrap() 读取结果。始终给 quiesce() 传超时(如模块级常量 QUIESCE_TIMEOUT = 5),否则可能永久挂起。断言行为抛错时在 pytest.raises 中调用 unwrap()。链式行为可返回内层结果 cown,链跑完后依次 unwrap。多 cown 用 @when(x, y) 原子操作;动态数量 cown 可传列表或切片,行为内收到 list[Cown]。noticeboard 是全局键值存储(最多 64 键),行为内读取的是每次执行一次的只读快照,写入非阻塞。
限制:行为在独立子解释器中运行,类与函数必须定义在模块级,否则 worker 无法导入并崩溃;闭包引用外层函数局部变量会抛 SyntaxError,裸的多余参数抛 TypeError;async def 与生成器行为抛 SyntaxError;循环变量必须显式捕获(如 def _(c, i=i))。官方文本未提供更多项目配置、版本或依赖细节,暂未提供。