根据2016年3月3日与Alex Miller在clojure-dev上的讨论,Alex建议我们应该为clojure.core/atom功能添加测试,目前还没有这样的测试。
我提出了以下测试:
- 原子的各种实例化方式(带和不带验证器和元数据)
- 验证器是否会正确抛出异常
- 添加和移除监视器以及它们是否如预期那样触发。
- 改变值的各种方法(没有针对高负载并发问题或病态情况进行测试的目标)。
- IAtom接口中.swap的方法的arity是否符合预期 - 即无反射警告(为这类情况提供帮助/指南需要!)
- 生成性测试,尝试在原子中使用时寻找漏洞(上述排除的内容)。
Alex建议进行生成性测试,但没有性能测试。
补丁"0001-atom-unit-tests.clj"(已附上)包含以下单元测试:
- 创建"裸"原子
- 创建使用验证器的原子
- 确保validate-fn会触发且原子保持不变
- 确保deref (@)读宏创建正确的'(clojure.core/deref a)
- 确保CAS对于普通值有效(无需触发验证器等)。
这些测试未涵盖众多组合,但这只是一个开始。
为了覆盖所有情况(比如使用无效值进行CAS操作和其他奇怪的事情),确实需要进行生成性测试。