2016-09-02 17 views
0

In meiner spock Testklasse, ich habe den folgenden zwei Listen:Groovy: pop das letzte Element aus einer Stringliste

@Shared def orig_list = ['東京(成田・羽田)', '日本','アジア' ] 
@Shared def dest_list = ['ソウル', '韓国','アジア' ] 


def "Select origin"() 
{ 
    when: 
    something() 

    then: 
    do_something() 


    where: 
     area << orig_list.pop() 
     country << orig_list.pop() 
     port << orig_list.pop() 
     dest_area << dest_list.pop() 
     dest_country << dest_list.pop() 
     dest_port << dest_list.pop() 
} 

Aber immer den Fehler:

java.lang.IllegalArgumentException: Couldn't select option with text or value: ア.... 

Aber wenn ich nicht Verwenden Sie, wo blockieren und tun:

def "Select origin"() 
{ 
    def area = orig_list.pop() 
    def country = orig_list.pop() 
    def port = orig_list.pop() 

    def dest_area = dest_list.pop() 
    def dest_country = dest_list.pop() 
    def dest_port = dest_list.pop() 

    when: 
    something() 

    then: 
    do_something() 
} 

Als es funktioniert gut.

Wie kann ich die Werte in dem Block aus der Liste zu bekommen? Was war das Problem?

Antwort

3

Die Variablen im wo Block definiert erwartet Listen, aber der pop() -Methode gibt ein Element in der Liste, die in Ihrem Fall eine Zeichenfolge zu sein scheint.

Entweder die list.pop() in Klammern wickeln, wie diese [list.pop()] oder, vielleicht besser, schreiben Sie Ihre wo Block die Spaltensyntax zu verwenden, das heißt so etwas wie dieses:

where: 
    area | country | port | dest_area | dest_country | dest_port 
    'a1' | 'c1' | 'p1' | 'da1'  | 'dc1'  | 'dp1' 
    'a2' | 'c2' | 'p2' | 'da2'  | 'dc2'  | 'dp2' 
+0

Vielen Dank für die hilfreiche Antwort. Das habe ich nicht bemerkt, wo Block dort eine Liste erwartet. –

Verwandte Themen