基本并发缓存的状态属性测试
1. 执行流与模型决策
在进行状态属性测试时,有两个重要的执行流需要牢记。在生成命令和运行实际系统时,对前置条件、命令和状态转换的调用都会执行,因此模型中应避免产生副作用。从实际系统传递到模型的任何值都应被视为不透明的数据块,不能对其进行检查、匹配或用于旨在转换它的函数调用。
在抽象阶段,需要传入一些值以使模型能够使用它们,但由于实际系统未运行,无法提供这些数据。因此,PropEr 会传入抽象占位符。这些占位符可能与实际预期的数据不同,甚至类型也可能完全不同,所以必须将数据视为不透明的。
核心概念是,模型是引导测试执行的权威来源,而不是系统。系统是被测试的对象,不处于主导地位。
2. 测试基本并发缓存
2.1 缓存需求
我们要测试的缓存有以下简单要求:
- 可以通过键搜索读取值。
- 可以按需清空缓存。
- 可以配置缓存中可容纳的最大项数。
- 达到最大大小后,最早写入的值将被替换。
- 如果覆盖一个项,即使值发生了变化,缓存条目仍保持在相同位置。
这些要求与大多数缓存不同,大多数缓存关注的是长时间未访问的条目,而我们的缓存侧重于写入,并且在淘汰策略中甚至不关心更新。但这没关系,我们的目的是展示如何对该缓存进行建模,而不是编写一个优秀的缓存。
2.2 缓存实现
一般来说,状态测试常用于集成测试,通常在项目后期编写程序后再编写测试。我们遵循这个原则,先实现缓存,再进行测试。
以下是缓存的实现代码,包括 Erlang 和 Elixir 两种语言:
超级会员免费看
订阅专栏 解锁全文
9040

被折叠的 条评论
为什么被折叠?



