2013-10-23 102 views
2

如果在下面進行了spock測試,則setup塊將爲where塊中的每個數據元素運行一次。我可以讓它只運行一次嗎?僅運行測試設置一次

setup: 
def x = 1 

when: 
x++ 

then: 
x == y 

where: 
y << [2, 3, 4] 
+0

在單獨的'def setup(){}中初始化'x' //在每個要素方法的方法之前運行嗎? –

+0

@tim_yates它沒有。當使用_where_塊時,每個y值的每次運行都將作爲單獨的特徵方法執行。因此x也將被重新初始化。 – topr

回答

2

只需使用@Shared註釋,並宣佈X作爲類字段。該值將在要素方法執行之間(多個要素方法之間)重用。

class SomeSpockSpec extends Specification { 

    @Shared def x = 1 

    def 'x going to be incremented'() { 
      when: 
      x++ 

      then: 
      x == y 

      where: 
      y << [2, 3, 4] 
    } 
} 
+2

如果初始化共享變量需要比簡單賦值語句更多的代碼,則可以創建setupSpec()方法。在規範運行的任何測試之前,這將被執行一次。 –

+0

@AlexBlakemore是對的。而且,__setupSpec()__方法適用於標註爲__ @ Shared__的字段。 – topr