0007 与 0008 是本次改造新产生的决策(原计划 6 条)。它们同样满足「后人会问为什么」:把运行锁改成互斥体、或给库里 27 个函数补上 SupportsShouldProcess,都是看起来更规范的错法。 CHANGELOG.md:把 README 里那 33 行「相对旧版修了什么」整节搬过去,并补上本次改造的记录(11 条修复 + 6 条结构与规范,每条修复都写明现象与现状)。README 那一节换成指针。 README 新增两节:「验收与静态分析」(六个层次、Run-RealSmoke 为什么独立存在、以及那 6 条格式规则默认 Disabled 这个容易漏掉的事实);「口令放在哪里」(默认留空不是遗漏,附迁移与验证命令)。 .markdownlint.json 照 PowerShell 主仓库的实践(default true、行长 240),只把 MD024 从关闭改成「仅同级不重复」,因为变更日志需要重复标题。顺带按 .editorconfig 把 .md 的 BOM 去掉。
1.5 KiB
1.5 KiB
测试双轨:Pester 是单元面,零依赖套件是冒烟与 5.1 入口
两套套件一度覆盖同一批行为(tests/Run-Tests.ps1 96 个用例与 Pester 的 129 个 It 逐节
对应)。留下两套完整副本是纯维护税,但只留 Pester 也不行:.tools/ 是 gitignore 的,
一台新克隆、没网、或只有 5.1 的机器上 Install-TestDependencies.ps1 拉不到 Pester。
分工:
- Pester 套件(
tests/*.Tests.ps1)= 单元面,用Mock/InModuleScope测私有函数。 - 零依赖套件(
tests/Run-Tests.ps1)= 关键冒烟:清单与名录解析、归档命名、排除翻译、 manifest 往返、原子写与运行锁。只要 PowerShell 与 7z,两个版本都能跑。 tests/Run-E2E.ps1= 端到端:真的调用 7z 打包、删源、恢复、逐字节对拍。tests/Run-RealSmoke.ps1= 拿真实清单与真实归档跑只读冒烟(-DryRun/-VerifyOnly,并用 manifest 的 SHA256 证明一个字节都没写)。test.ps1= 唯一入口,把上面几层在 7 与 5.1 上各跑一遍。
最后那个"真实清单冒烟"不是锦上添花:清单里 24 条把方向标记贴在目标上(+WindowsTerminal),
而解析器当时只认独立记号 —— 于是那些条目被当成"名叫 +WindowsTerminal 的软件名"、静默记成
missing-source 跳过,备份照常退出 0,所有夹具测试全绿。只有拿真实清单跑一遍才看得见。