muse-agent-example/.agent/rules/测试隔离.md
zizi af08551d7b 智能体能力与规则:导航元信息、技能目录与执行纪律
- 能力文件补 导航元信息(内容描述/使用场景/使用要求),技能目录按目录派生;索引检查与磁盘逐条一致。
- 规则:计划与提交新增「验证期冻结源码」「全量只跑一次」两条纪律并写清与生成、验收数据库的关系;
  模块依赖、任务与证据、文档与资源生成、测试隔离等规则同步本轮口径。
- 角色合同与配置的模型白名单保持一致;技能正文不再夹带索引注记(与后端资源加载同口径)。
2026-09-18 01:15:12 +08:00

3.9 KiB
Raw Blame History

测试隔离规则

权威合同:tests/用例清单.json、docs/系统架构/新版设计/迁移与验收.md;机械门禁:tests/conftest.py(OS 进程隔离 + 用例选择 + 全跳过守卫)、工具/维护索引.py。

  1. 默认离线:默认测试进程由 macOS sandbox 或 Linux seccomp 禁止外部连接,覆盖收集阶段、数据库驱动及其子进程;防护不可用时失败,不退回无防护执行。显式外部用例使用 --外部环境 与环境标记选择。
  2. 显式外部环境:需要隔离 PostgreSQL 的用例标记 数据库 并使用 隔离数据库URL 夹具;缺 MUSE_TEST_DATABASE_URL 时直接失败,不跳过或回退旧库。 实际Pi循环另标记宿主,通过make 宿主测试显式提供固定Node与Pi包路径;普通数据库测试剔除此标记。宿主验证使用合成提供方,不等于真实模型验证。真实外部模型另标记真实模型,通过make 真实模型测试显式提供地址与凭据文件;普通数据库测试剔除该标记。
  3. 用例身份:完整 case_id 与清单中的实际文件、符号及参数行绑定,不靠名称后缀匹配;pytest --case TC-… 选择用例,--case 'TC-…[参数ID]' 选择参数行。同符号承接多个 ID 时必须分别绑定无交叠参数。未知 ID、目标缺失与冒用均失败;Junit 留存完整 ID 和参数 ID。
  4. 可判定性:用例体内必须有 assert/raise/fail/skip/xfail;纯 print 用例被索引检查在执行前拦截。
  5. 空收集不通过:零收集(退出码 5)、全跳过(守卫改写退出码 5)、超时与失败都如实呈现;不得以返回码 0 掩盖。
  6. 替身显式标记:协议替身、模型替身、宿主替身必须在用例名或文档串标明;替身通过不宣称真实链路通过。
  7. 收集范围:用例只放 tests/单元|契约|集成|架构|迁移|端到端|真实调用/;旧实现与旧测试树已退出本仓,不参与同一收集。

行为与证据原则

  • 用例保护独立可观察行为:给定条件、触发动作、预期结果、环境与合同明确;夹具不依赖前一个测试写出的正文或全局前序状态。文件只组织代码,参数行固定稳定身份。
  • 测试登记采用扁平 cases:case_id/file/symbol/environment 及适用的 parameter_ids/given/when/then/contract;文件与合同路径相对仓库根。登记不是执行证据,不记录过程分期、退役历史或“通过”状态。
  • 合并仅适用于输入边界、动作、断言和环境相同的行为,不能丢失参数分支;已替代实现的目录形状不当作长期验收标准,原子性、范围拒绝、恢复与保真反例必须保护。
  • 纯解析、校验、patch 与预算计算使用离线输入和假时钟;CAS、并发、幂等、事务回滚、约束与身份分流使用隔离 PostgreSQL 和受控同步点,替身不能证明数据库语义。
  • 文件竞争、权限、软链接和恢复使用独立临时目录,必要时用独立进程,不操作私人原稿。作者点击、中文输入与页面重连使用真后端浏览器旅程;组件测试只证明组件范围。
  • 角色实际行为须固定模型、宿主、资源版本及预算;脚本观察、协议替身与模型文学效果分别取证,不能互相冒充。
  • 执行证据包含代码版本、环境用途、夹具与参数版本、实际收集身份、结果和失败断言;不允许只跑第一参数、打印 PASS 或缺环境跳过冒充通过。设计核对只证明登记和合同一致,不证明全部行为已通过。