# 测试隔离规则 > 权威合同:`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 或缺环境跳过冒充通过。设计核对只证明登记和合同一致,不证明全部行为已通过。