2015-04-27 1 views
7

У меня есть 2 метода испытаний.Спок-тестирование: очистка после «где:» заканчивается блоком

Все они выполняют каждую строку блока, мне нужна очистка для добавления методов &.

Я пробовал блок очистки, void cleanup(), def cleanupSpec(), не подходит.

Как я могу явно выполнить очистку после определенного метода, у которого есть блок «где:»?

def "Add"() { 
    setup : 
    expect : 
    where: 
    } 

def "Relax"() { 
    setup : 
    expect : 
    where:  
    } 
+0

Немного неясно. Не могли бы вы привести пример? – Opal

+0

неважно, я просто поместил новый метод между «add» и «relax», назвал его «addClean» и сбросил все оттуда. – Shay

+1

мой метод очистки -> def «Добавить очистку - не тест»() { ожидать: ! Cache.clear() } – Shay

ответ

11

Вы можете иметь очищающий блок в методе примерно так:

@Unroll 
def "a method that tests stuff"(){ 
    given: 
    def foo = fooDAO.save(new Foo(name: name)) 
    when: 
    def returned = fooDAO.get(foo.id) 
    then: 
    returned.properties == foo.properties 
    cleanup: 
    fooDAO.delete(foo.id) 
    where: 
    name << ['one', 'two'] 
} 

Блок «зачистка» получит запустить один раз на тест итерации.

+1

Как я писал, я попробовал, и мне нужно очистить один раз в конце всех итераций. – Shay

+0

Возможно, вам понадобится @Unroll ваш метод для его очистки после каждой итерации. – th3morg

3

Если вы используете @Unroll, то для каждой записи в блоке будет вызываться cleanup:. Чтобы выполнить только очистку после, тогда переместите свой код внутри закрытия def cleanupSpec().

@Shared 
def arrayOfIds = [] 

@Unroll 
def "a method that tests stuff"(){ 
    given: 
    def foo = fooDAO.save(new Foo(name: name)) 
when: 
    def returned = fooDAO.get(foo.id) 
    arrayOfIds << foo.id 
then: 
    returned.properties == foo.properties 
where: 
    name << ['one', 'two'] 
} 

def cleanupSpec() { 
    arrayOfIds.each { 
    fooDAO.delete(it) 
    } 
} 
Смежные вопросы