摘自《Java Concurrency in Practice 》一书,第 12.1 章测试正确性,特别是第 12.1.3 节测试安全性(作者希望设置测试用例以测试有界缓冲区类的数据竞争安全性)
为确保您的测试实际测试您认为它所做的事情,重要的是校验和本身不能被编译器猜到。使用连续整数作为测试数据是个坏主意,因为结果总是相同的,并且可以想象智能编译器可以预先计算它。
为了避免这个问题,应该随机生成测试数据,但是许多其他有效的测试会因随机数生成器 (RNG) 的选择不当而受到影响。随机数生成可以在类和计时工件之间创建耦合,因为大多数随机数生成器类是线程安全的,因此引入了额外的同步。为每个线程提供自己的 RNG 允许使用非线程安全的 RNG。
我不明白作者反对使用随机数生成器生成测试输入的观点。具体来说,随机数生成可以在类和时序工件之间创建耦合对我来说不是很清楚。
- 他在这里指的是哪些类和计时工件?
- RNG 可以创建什么样的耦合?