Как сделать метод Spock Helper доступным во всех спецификациях или глобально

У меня есть метод Spock Helper в конкретной спецификации. Этот метод генерирует строки для проверки ограничений размера:

def genString(size) {
    def nameTooLong = 'x'
    size.times { nameTooLong <<=  "x" }
    return nameTooLong
}

Я хотел бы повторно использовать этот вспомогательный метод и в других спецификациях. Как это сделать?

Спасибо за помощь

p.s. есть ли классное кунг-фу, чтобы выполнить то же самое в одной короткой строке, чтобы я мог передать в качестве аргумента при инициализации экземпляров?


person latvian    schedule 02.10.2012    source источник


Ответы (3)


Вы также можете изменить свою функцию на:

def genString(size) {
  'x' * ( size + 1 )
}

or

def genString(size) {
  'x'.padLeft( size + 1, 'x' )
}

Этот второй, вы, вероятно, могли бы встроить в свои тесты, поскольку он довольно автономен.

person tim_yates    schedule 03.10.2012

Вы также можете использовать наследование.

class SharedFixture extends Specification {
    def sharedMethod() {
       ......
    }
}

затем

class TestClass extends SharedFixture {
    def test() {
       sharedMethod()
    }
}
person dustin.schultz    schedule 01.07.2013

У меня была аналогичная потребность в тестах Spock и повторном использовании вспомогательных методов в спецификациях, которые генерируют тестовые данные.

Эти вспомогательные методы зародились в одном Spec.

Я только что провел рефакторинг и создал вспомогательный класс со статическими методами.

Вы можете сделать то же самое, создать вспомогательный класс и переместить свой тестовый метод как таковой:

class TestDataGen {

    ....
    public static String genString(size) {
        def nameTooLong = 'x'
        size.times { nameTooLong <<=  "x" }
        return nameTooLong
    }
    ....
}
person Philip Tenn    schedule 02.10.2012
comment
Спасибо, Филипп, за ответ на мой вопрос. - person latvian; 03.10.2012