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 检测数据竞争)
func RunWithClock ¶ added in v0.13.0
func RunWithClock[T any](t *testing.T, c Contract[T], factory ClockFactory[T])
RunWithClock 跑时钟驱动的 TTL 边界场景(4 个子测试,#9——供支持时钟注入的 实现接入,补 Run 真实时间套件覆盖不了的确定性边界):
- ttl_expiry_boundary 过期边界语义:SetWithTTL 后推进到过期时刻**仍命中** (expiresAt 为闭边界,After 判定),越过 1ns 即 miss
- ttl_zero_never_expires TTL=0(自定义 TTL 传 0)永不过期——推进 100 年仍命中
- null_marker_out_of_window Source (nil,nil) 写 null 标记;推进远超空值窗口 后重新回源(source 计数 1→2)
- overwrite_resets_expiry 重写刷新过期时刻:原 TTL 已越过、新 TTL 仍在窗内 → 命中新值
Types ¶
type ClockFactory ¶ added in v0.13.0
type ClockFactory[T any] func(t *testing.T, source cache.SourceFunc[T], clock *FakeClock) cache.CacheAside[T]
ClockFactory 是支持时钟注入的缓存工厂形态:实现把 clock.Now 路由到 全部 TTL 判定(如 LocalConfig.Now),后台资源由 factory 经 t.Cleanup 清理。 支持空值缓存的实现请配置正值 NullTTL(套件以「远超缺省空值窗口」的推进 验证过窗重源)。
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。
type FakeClock ¶ added in v0.13.0
type FakeClock struct {
// contains filtered or unexported fields
}
FakeClock 是套件提供的假时钟(并发安全;测试内手动推进)。 实现把 clock.Now 注入配置后,场景经 Advance 确定性驱动 TTL 过期—— 无 sleep 无 flake(#9)。
func NewFakeClock ¶ added in v0.13.0
func NewFakeClock() *FakeClock
NewFakeClock 创建起点为 2026-01-01T00:00:00Z 的假时钟 (取非零真实量级时刻,避开零值 time.Time 的「无过期」歧义)。