2014-01-17 3 views
6

Der folgende Beispielcode:Wie kann ich in dem ‚where:‘ einen Range statt Liste angeben Block einer Spock Spezifikation

class MySpec extends spock.lang.Specification { 
    def "My test"(int b) { 
     given: 
     def a = 1 

     expect: 
     b > a 

     where: 
     b << 2..4 
    } 
} 

führt den folgenden Kompilierungsfehler: „where-Blöcke nur Parametrisierungen enthalten (z 'Gehalt < < [1000, 5000, 9000]; salaryk = Gehalt/1000')“

sondern eine Liste anstelle einer Strecke unter Verwendung von:

 where: 
     b << [2,3,4] 

Kompilierungen und läuft fin e wie erwartet.

Kann ich irgendwie auch einen Bereich angeben?

Antwort

9

Verwenden

where: 
    b << (2..4) 

Der Test kann auch unten optimiert werden. Notieren Sie keine Argumente für den Test.

def "My test"() { 
    expect: 
     b > a 

    where: 
     a = 1 
     b << (2..4) 
} 
+1

Danke! Irgendwelche Einblicke, warum Sie die Klammern brauchen? – AndrewW

+5

<< hat eine höhere Priorität als .., also b << 2..4 wird interpretiert als (b << 2) .. 4. Dies schlägt fehl, weil 2 nicht iterierbar ist, bevor es aufgrund von Fehlern fehlschlägt. Siehe http://docs.codehaus.org/display/GROOVY/JN2535-Control – loteq

+1

Vielen Dank für den Link und die Erklärung. In der Dokumentation befinden sie sich in derselben Zeile (<< >> >>> .. .. <). Bedeutet das, dass sie den gleichen Vorrang haben und daher von links nach rechts interpretiert werden, was zum Scheitern führt? Das macht auch Sinn für mich. – AndrewW