4.4 KiB
4.4 KiB
测试隔离规则
权威合同:
tests/用例清单.json、docs/系统架构/新版设计/迁移与验收.md;机械门禁:tests/conftest.py(OS 进程隔离 + 用例选择 + 全跳过守卫)、工具/维护索引.py。
- 默认离线:默认测试进程由 macOS sandbox 或 Linux seccomp 禁止外部连接,覆盖收集阶段、数据库驱动及其子进程;防护不可用时失败,不退回无防护执行。显式外部用例使用
--外部环境与环境标记选择。 - 显式外部环境:需要 PostgreSQL 的用例标记
数据库并使用对应夹具;缺MUSE_TEST_DATABASE_URL时直接失败,不跳过或回退旧库。普通业务测试默认使用同一会话的共享已迁移测试库(例间在同一连接清空业务表并重设序列,保留模板与结构种子),不再为每条普通用例执行CREATE DATABASE ... TEMPLATE克隆与全量销毁;仅当用例自身验证目标为数据库创建、迁移升级、跨版本切换或模板隔离时,才使用独立克隆库。 超过三分钟的大 N 统计评测用例标记慢,属于评测实验范畴,默认不包含在常规数据库验证中,只有用户显式请求实验时才运行。 实际Pi循环另标记宿主,通过make 宿主测试显式提供固定Node与Pi包路径;普通数据库测试剔除此标记。宿主验证使用合成提供方,不等于真实模型验证。真实外部模型另标记真实模型,通过make 真实模型测试显式提供地址与凭据文件;普通数据库测试剔除该标记。 - 用例身份:完整
case_id与清单中的实际文件、符号及参数行绑定,不靠名称后缀匹配;pytest --case TC-…选择用例,--case 'TC-…[参数ID]'选择参数行。同符号承接多个 ID 时必须分别绑定无交叠参数。未知 ID、目标缺失与冒用均失败;Junit 留存完整 ID 和参数 ID。 - 可判定性:用例体内必须有 assert/raise/fail/skip/xfail;纯 print 用例被索引检查在执行前拦截。
- 空收集不通过:零收集(退出码 5)、全跳过(守卫改写退出码 5)、超时与失败都如实呈现;不得以返回码 0 掩盖。
- 替身显式标记:协议替身、模型替身、宿主替身必须在用例名或文档串标明;替身通过不宣称真实链路通过。
- 收集范围:用例只放
tests/单元|契约|集成|架构|迁移|端到端|真实调用/;旧实现与旧测试树已退出本仓,不参与同一收集。
行为与证据原则
- 用例保护独立可观察行为:给定条件、触发动作、预期结果、环境与合同明确;夹具不依赖前一个测试写出的正文或全局前序状态。文件只组织代码,参数行固定稳定身份。
- 测试登记采用扁平
cases:case_id/file/symbol/environment及适用的parameter_ids/given/when/then/contract;文件与合同路径相对仓库根。登记不是执行证据,不记录过程分期、退役历史或“通过”状态。 - 合并仅适用于输入边界、动作、断言和环境相同的行为,不能丢失参数分支;已替代实现的目录形状不当作长期验收标准,原子性、范围拒绝、恢复与保真反例必须保护。
- 纯解析、校验、patch 与预算计算使用离线输入和假时钟;CAS、并发、幂等、事务回滚、约束与身份分流使用隔离 PostgreSQL 和受控同步点,替身不能证明数据库语义。
- 文件竞争、权限、软链接和恢复使用独立临时目录,必要时用独立进程,不操作私人原稿。作者点击、中文输入与页面重连使用真后端浏览器旅程;组件测试只证明组件范围。
- 角色实际行为须固定模型、宿主、资源版本及预算;脚本观察、协议替身与模型文学效果分别取证,不能互相冒充。
- 执行证据包含代码版本、环境用途、夹具与参数版本、实际收集身份、结果和失败断言;不允许只跑第一参数、打印 PASS 或缺环境跳过冒充通过。设计核对只证明登记和合同一致,不证明全部行为已通过。