根据2016年3月3日与Alex Miller在clojure-dev上的讨论,Alex建议我们应向clojure.core/atom功能添加测试,目前尚无此类测试。
我提出了以下测试方案:
- 构造原子的各种方式(带有和没有验证器和元数据的)
- 验证器正确抛出异常
- 添加和删除观察者以及它们是否按预期触发。
- 改变值的各种方式(不针对查找高负载并发问题或病态案例等)。
- IAtom接口的.swap方法的arity按预期工作 - 即无反射警告(需要此类情况的帮助/提示!)
- 生成测试,尝试在原子中查找错误(上述排除的内容)。
Alex建议进行生成测试,但不要进行性能测试。
补丁"0001-atom-unit-tests.clj"(附件)包含以下单元测试:
- 创建“裸”原子
- .created atom with validator
- 触发 validate-fn 并且原子未更改
- 使用 deref (@) 读取宏创建正确的'(clojure.core/deref a)
- CAS对普通值有效(没有触发验证器等情况)。
这些测试未涵盖许多组合,但这只是一个开始。
要涵盖所有情况(例如使用无效值进行 cas 以及其他奇怪的事情),生成测试确实是必需的。