2014-03-03 26 views
3

我正在使用Spock框架進行測試,並且我有一個關於where子句中的multivaraible賦值的問題。spock測試的where子句中的多個賦值?

我有以下的測試案例:

def "sending a message delegates to message sender"() { 
    when: 
    sendMessage(x,y) 
    then: 
    1 * messageSender.send(x,y) 
    where: 
    x << 1 
    y << 2 
} 

我想用一個單一的賦值運算符在where子句中,以取代多個變量賦值。我想:

where: 
    [x,y] << [1,2] 

,但有一個MissingMethod例外。我認爲這是因爲表達式[1,2]被視爲數組而不是列表。

注意,下面的工作:

where: 
    [x,y] << [1,2].combinations() 

看來,組合()方法返回一個列表類型,但儘管以下沒有工作:

where: 
    [x,y] << [1,2].asList() 

使用組合()是違反直覺的,所以我想知道是否有一個簡單,優雅的方式來初始化多個變量s在Spock中。

編輯:我使用的斯波克版本0.7 Groovy的2.0

+0

多重賦值語法是'(x,y)= [1,2]'是否有效 –

+0

實際上,我只看了一下文檔,對於Spock它看起來像'[x,y] = [ 1,2]'應該改爲 –

+0

感謝您的評論。 '(x,y)= [1,2]'產生錯誤*,其中塊可能只包含參數化*,並且'[x,y] = [1,2]'產生錯誤* ListExpression是一個壞表達式分配運營商的LHS *。 –

回答

4

多重分配也要做如下所述:

[x, y] << [[1,2]] 

這裏是一個contrived example其中一個組合測試失敗。

Multiple variable data pipes使用了一個與SQL ResultSet非常相似的例子。

+1

使用'[x,y] << [[1,2]]'工作。我假設(從SQL示例)'where:'塊期望爲每個變量多次賦值,因此需要元組列表,而不是元組。 –