跳到主要内容
知识地图Conformance tests 究竟证明什么?ArcBlock 体系

你在这里。看看这个问题与其他知识怎样相连。

选择节点前往页面 · 展开后可留在地图中阅读

知识地图沿着连接,读懂一个问题
← AFS

一个问题

Conformance tests 究竟证明什么?

检查实现是否遵守声明的公共契约,而非只检查示例能跑。

  1. 实际 Provider输入已知资源
  2. 共享测试 + Fixture比较行为与契约
  3. 可检查的结果
关系示意 · 箭头说明职责与连接,不代表完整协议时序。

把承诺变成可执行检查

AFS 的 runProviderTests() 接收 provider 工厂、资源结构和相应操作的 fixture,让多个实现接受共同的检查。结构描述告诉测试有哪些节点;能力声明决定哪些额外行为需要被验证。

例如声明支持条件写入,就需要相应的 ifMatch fixture,而不是仅在文档里写一句“支持并发”。相关测试还要求指向同一底层存储的独立 provider 对象,避免只验证单个对象内部的锁。

typescript
// Fixture outline: fill in a real provider and its actual structure.
runProviderTests({
  name: "ReportProvider",
  createProvider: () => new ReportProvider(),
  structure: { root: { name: "", children: [
    { name: "report", content: { title: "Prepare the keynote", status: "draft" } }
  ] } }
});

通过不等于无条件保证

测试证明的是给定版本、fixture 和环境中的契约。它不自动证明真实外部服务可用、跨进程并发正确、权限配置正确或业务流程完整。

好的 fixture 应接到真实实现,不应该用专为测试编写的假返回值代替实际 provider。新增能力时,要同步扩展被检查的行为。

示例中的三个词

Provider 工厂是“每次调用都创建一个 provider 实例”的函数,即示例里的 () => new ReportProvider()。Fixture 是测试准备的数据与约定,例如有哪些资源、读取后应得到什么内容。测试用这些已知输入和预期结果检查实现。

上面的最小结构示例只建立资源与读取的检查基础,没有提供条件写入的测试数据,也不能证明写入或并发正确。条件写入指“资源版本仍符合我给出的条件时才允许写入”;声明这种能力后,要额外提供 ifMatch fixture,包括指向同一底层数据的另一个 provider 实例。跨进程保证还需要相应的跨进程测试。

检查一下理解

Conformance tests 究竟证明什么?

检查实现是否遵守声明的公共契约,而非只检查示例能跑。

沿着学习路径继续