2013-10-23 101 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