Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Run ¶
func Run[T any](t *testing.T, c Contract[T], factory func(t *testing.T, source cache.SourceFunc[T]) cache.CacheAside[T])
Run 跑完整契约场景(8 个子测试,任何子测试失败即实现违反契约)。
factory 每个场景调用一次,用套件给定的 source 构造全新被测缓存 (source 的行为——返回值/计数——由各场景闭包控制,factory 原样注入即可); 被测缓存的后台资源由 factory 经 t.Cleanup 清理。
每个子测试覆盖一条必须跨实现一致的语义:
- miss_returns_nil_nil 未命中返回 (nil, nil) 且非 error,Exists=false
- set_get_roundtrip Set/Get 往返相等;重复 Set 覆盖旧值
- set_with_ttl_expiry SetWithTTL 短 TTL 过期后 miss(有界等待)
- del_and_delbatch Del/DelBatch 后 miss;对不存在的 key 幂等
- get_or_load_backfill 未命中回源回填,source 计数恰 1
- null_marker Source (nil,nil) → null 标记防穿透,Del 后重新回源
- refresh Refresh 取 source 新值并更新缓存
- concurrent_mixed_ops 并发混合读写删无 panic(配合 -race 检测数据竞争)
Types ¶
type Contract ¶
type Contract[T any] struct { // NewValue 返回第 i 个测试值(i 从 0 递增)。 // 实现必须保证任意 i != j 时两值两两不同(套件依赖此性质断言覆盖与刷新)。 NewValue func(i int) *T // Equal 判断两个值是否相等。 // 实现必须容忍 nil 入参(miss 场景会拿 nil 与期望值比较)。 Equal func(a, b *T) bool }
Contract 定义被测缓存的价值工厂与相等性。
通过 Contract 抽象,套件对任意值类型 T 复用同一组场景; 可比较类型可直接用 Comparable 获得现成实现。
func Comparable ¶
func Comparable[T comparable]() Contract[T]
Comparable 返回可比较类型的现成 Contract。
NewValue 经反射按类型枚举生成第 i 个值:
- 有符号/无符号整数系:取 i 本身;
- 字符串系:strconv.Itoa(i)。
其他 comparable 类型(bool、struct、指针、channel 等)无法从整数可靠 枚举出两两不同的值,请自定义 Contract。
Click to show internal directories.
Click to hide internal directories.