【发布时间】:2014-05-02 01:08:53
【问题描述】:
在我的 Java 类中,我有一个方法可以创建一个对象并实现某些逻辑以将随机值分配给它的一些变量,使用 Random 的一个静态实例 (static Random rn = new Random();)。这些变量之一是objectId。
如何编写 Spock 单元测试来验证 objectId 值是否在所有创建的对象中是唯一的?
如果我只需要 两个连续的对象我会写这样的东西(省略导入):
class MyTest extends Specification {
def @Shared obj = new MyObject()
def "consecutive IDs are not equal"() {
given:
def id1 = ar.randomObject(MyObject.rn).getId()
def id2 = ar.randomObject(MyObject.rn).getId()
expect:
id1 != id2
}
}
如何将此逻辑扩展到可变数量的实例?
【问题讨论】:
-
你无法测试它总是独一无二的。使用 Random 生成 id 不是一个好主意
-
确实,对于足够大的 id 集,它并不总是唯一的
-
@tim_yates 是的。这实际上是测试的目的。我对 10,000 个 ID 没问题,并保证在 100,000 个时失败。
标签: java unit-testing groovy spock