2016-09-02 2 views
0

В моем Спока тестовом классе, я следующие два списка:Groovy: поп последний элемент из списка строк

@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() 
} 

Но получаю ошибку:

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

Но, если я не используйте там, где есть блок и выполните следующие действия:

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() 
} 

Чем это работает.

Как получить значения в блоке из списка? В чем была проблема?

ответ

3

Переменные, определенные в блоке where, ожидают списки, но метод pop() возвращает элемент в вашем списке, который в вашем случае кажется строкой.

Либо обернуть list.pop() в скобках, как этот [list.pop()] или, возможно, лучше, переписать где блок использовать синтаксис столбца, то есть что-то вроде этого:

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

Большое спасибо за полезный ответ. Я не заметил, что там, где блок ожидает список. –

Смежные вопросы