2015-04-27 48 views
7

Mam 2 metody testowania.Testowanie spocków: czyszczenie po zakończeniach bloku "where:"

Wszystkie one wykonują każdą linię bloku where, potrzebuję oczyszczenia dla dodania metod relaksacyjnych &.

Próbowałem cleanup bloku, void czyszczenia(), def cleanupSpec(), nie pasuje.

Jak mogę jawnie uruchomić czyszczenie po określonej metody, które mają blok "gdzie:"?

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

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

To trochę niejasne. Czy mógłbyś podać przykład? – Opal

+0

Nieważne, po prostu wstawiam nową metodę pomiędzy "dodaj" i "relaks", nazwij ją "addClean" i zresetuj wszystko stamtąd. – Shay

+1

moja metoda czyszczenia -> def "Dodaj czyszczenie - nie test"() { oczekiwać: ! Cache.clear() } – Shay

Odpowiedz

11

Można mieć blok oczyszczania w sposób tak:

@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'] 
} 

W „porządki” blok będzie się uruchamiać raz na test iteracji.

+1

Jak napisałem, próbowałem go i potrzebuję oczyszczenia raz na końcu wszystkich iteracji. – Shay

+0

Możliwe, że być może będziesz musiał @Unrollować swoją metodę, aby umożliwić jej czyszczenie po każdej iteracji. – th3morg

3

Jeśli użyjesz @Unroll, to dla każdej pozycji w bloku where: zostanie wywołana cleanup:. Aby uruchomić tylko czyszczenie raz, a następnie przenieść swój kod wewnątrz zamknięcia 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) 
    } 
}