Help us shape the future of Go! Take the 2026 Go Developer Survey

cachetest

package
v0.9.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 17, 2026 License: MIT Imports: 8 Imported by: 1

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 清理。

每个子测试覆盖一条必须跨实现一致的语义:

  1. miss_returns_nil_nil 未命中返回 (nil, nil) 且非 error,Exists=false
  2. set_get_roundtrip Set/Get 往返相等;重复 Set 覆盖旧值
  3. set_with_ttl_expiry SetWithTTL 短 TTL 过期后 miss(有界等待)
  4. del_and_delbatch Del/DelBatch 后 miss;对不存在的 key 幂等
  5. get_or_load_backfill 未命中回源回填,source 计数恰 1
  6. null_marker Source (nil,nil) → null 标记防穿透,Del 后重新回源
  7. refresh Refresh 取 source 新值并更新缓存
  8. 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。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL