我有一个示例脚本,如下所示:
@Stepwise
class RandomTest extends GebReportingSpec {
@Shared
Random random = new Random()
def tag = random.nextInt(999)+1
def setupSpec() {
new File('/ProgramData/geb.properties').withInputStream {
properties.load(it)
}
}
def "Random Test"(){
when:
println("Random1: ${tag}")
println("Random2: ${tag}")
then:
Thread.sleep(1000)
}
def "Random test2"(){
when:
println("Random3: ${tag}")
then:
Thread.sleep(1000)
}
}
在此示例中,Random1和Random 2打印相同的数字,而Random 3打印不同的数字。
例如,这是我运行代码时的输出:
Random1: 528
Random2: 528
Random3: 285
我认为这是因为在要素方法之间重新评估了共享变量。我尝试将这些变量声明移到@Shared
注释之外,但无济于事。
我想要它,以便在规范开始时生成随机标记变量,并且希望它保留其值,但是我不确定如何设置全局变量来执行此操作。我需要实例化setupSpec内部的变量吗?
答案 0 :(得分:2)
@Shared
变量。观察的原因是您输出的不是@Shared
变量tag
。 random.nextInt(999)+1
会在每种测试方法之前进行评估。
如果在@Shared
上放置tag
,则值将保持不变。
答案 1 :(得分:0)
看起来像从设置规范中实例化变量是可行的:
@Shared
def tag
def setupSpec() {
new File('/ProgramData/geb.properties').withInputStream {
properties.load(it)
}
Random random = new Random()
tag = random.nextInt(999)+1
}
def "Random Test"(){
when:
println("Random1: ${tag}")
println("Random2: ${tag}")
then:
Thread.sleep(1000)
}
def "Random test2"(){
when:
println("Random3: ${tag}")
then:
Thread.sleep(1000)
}