Groovy:弹出字符串列表中的最后一个元素

时间:2016-09-02 09:33:57

标签: list testing groovy spock geb

在我的spock测试类中,我有以下两个列表:

@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: ア....

但如果我不使用where block并且喜欢:

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

比它运作正常。

如何从列表中的哪个块中获取值?出了什么问题?

1 个答案:

答案 0 :(得分:3)

where块中定义的变量需要列表,但pop()方法返回列表中的一个元素,在您的情况下,它似乎是一个字符串。

list.pop()括在括号中,例如[list.pop()],或者更好的是,重写where块以使用列语法,即:

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