2014-05-02 2 views
0

В моем классе Java у меня есть метод, который создает объект и реализует определенную логику для назначения случайных значений некоторым из его переменных, используя один статический экземпляр Random (static Random rn = new Random();). Одна из этих переменных - objectId.Как проверить, что созданное значение уникально?

Как я могу написать Спки теста блока, чтобы убедиться, что 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 

    } 
} 

Как продлить эту логику с переменным числом экземпляров?

+0

Вы не можете проверить это всегда уникально. использование Random для генерации идентификаторов - не очень хорошая идея. –

+1

Действительно, гарантировано, что она не всегда уникальна для достаточно большого набора идентификаторов. –

+0

@tim_yates Вы правы. На самом деле это была цель теста. Я в порядке с 10 000 идентификаторами и гарантированно потерпел неудачу с 100 000. –

ответ

1

Как насчет этого? Испытательный класс:

class Test { 
    static Random r = new Random() 
    Long objectId = r.nextLong() 
} 

//Test Case 
def "consecutive IDs are not equal"() { 
    given: "20 ids from 20 Test Objects" 
     def ids = (1..20).collect { new Test().objectId } 

    expect: "ids are unique" 
     // use unique(false) not to mutate the list 
     ids.unique(false) == ids 
} 
+1

Спасибо. Я многому научился, расшифруя ваш ответ. –

+0

Отлично. Рад, что это было полезно. :) @ PM77-1 – dmahapatro

0

Я боюсь, что мой заводной не до задачи, но логика:

def ids as Set 

def "IDs are not duplicated"() { 
    expect: 
    ids.contains(id) == false 

    cleanup: 
    ids.add(id) 

    where: 
    id << listOfAllIds() 
} 

То есть: утверждать, что каждый идентификатор в настоящее время не известно. Когда утверждение не сбой, запишите идентификатор, как известно в настоящее время.

Смежные вопросы