参考

测试与可靠性

zero test JSON、包测试、预期失败测试、快照、模糊测试和加固门控。

测试与可靠性

zero test 运行单个 .0 文件或包中每个源文件的测试块。测试运行器是主 CLI 工作流的一部分,并为受支持的测试工作流报告结构化 JSON。

常用命令:

zero test conformance/native/pass/test-blocks.0
zero test --json --filter addition conformance/native/pass/test-blocks.0
zero test --json conformance/packages/test-app
pnpm run reliability:smoke
pnpm run native:sanitize

包测试会在包入口文件和本地模块中发现测试块。过滤测试使用对测试名称的 子串匹配,这使得 CI 分片保持简单且确定性。

预期失败测试使用 xfail:expected fail:[xfail] 命名。

结果JSON 效果
测试按预期失败。状态为 expected-failexpectedFailures 递增。
测试意外通过。状态为 unexpected-passunexpectedPasses 递增且命令失败。

JSON 契约

zero test --json 旨在用于 CI、编辑器和修复代理。稳定字段包括:

ok
sourceFile
target
testBackend
selectedTests
discoveredTests
passedTests
failedTests
expectedFailures
unexpectedPasses
durationMs
stdout
stderr
testDiscovery
fixtures
targetFacts
results

testDiscovery 记录测试集的发现方式:

  • 发现模式和过滤器
  • 包根目录和清单路径
  • 源文件数量和模块数量
  • 已发现和已选择的数量

fixtures.sourceFiles 列出已加载的源文件。fixtures.goldenOutput 记录确定性文本输出。fixtures.snapshotKey 标识用于审查的快照契约。

每个结果包含测试名称、状态、预期失败标志、持续时间、源位置,以及在 失败可用时的失败跨度。

黄金输出与快照工作流

黄金行将命令输出与精确的预期输出进行比较。快照行将结构化元数据或格式化 源码与已签入的契约进行比较。

像审查 API 变更一样审查快照变更:先确认行为变更,然后在实现该变更的 同一提交中更新夹具或预期 JSON。

可靠性冒烟测试将黄金、快照、模糊测试和崩溃复现行写入 .zero/reliability-smoke/report.json。它覆盖包测试、过滤测试、 预期失败行为、格式化器快照、标准库解析器辅助函数、生成的模糊测试 夹具以及最小化崩溃复现。

模糊测试与崩溃复现

模糊测试工具应当小巧、确定性且基于源码:

  • 解析器模糊测试应对生成的 .0 文件运行 zero tokens --jsonzero parse --json
  • 检查器模糊测试应运行 zero check --json 并对无效程序断言诊断信息,而非接受崩溃。
  • 格式化器模糊测试应将 zero fmt 输出与稳定的源码快照进行比较。
  • 标准库解析器模糊测试应使用模块示例(如 examples/std-data-formats.0)并检查 usedStdlibHelpers

当发现编译器崩溃时,将其缩减为 conformance 下的单个夹具或有文档记录的 冒烟复现。将最小化输入保留在可靠性报告中,直到有专门的回归测试接管它。

pnpm run native:sanitize 仍然是原生加固关卡。保持消毒器失败、模糊测试 失败和崩溃复现在 CI 中可见,而不是将它们隐藏在尽力而为的本地脚本之后。