您如何设置不会在特征方法之间重新评估的全局变量
How do you set global variables that don't get re-evaluated between feature methods
我的示例脚本如下所示:
@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)
}
}
在此示例中,随机 1 和随机 2 打印相同的数字,但随机 3 打印不同的数字。
例如,当我 运行 代码时,这是我的输出:
Random1: 528
Random2: 528
Random3: 285
我假设这是因为共享变量在特征方法之间被重新计算。我曾尝试将这些变量声明移到 @Shared
注释之外,但无济于事。
我想要它以便在规范的开头生成随机标记变量,并且我希望它保留其值,但我不确定如何设置全局变量来执行此操作。我需要在 setupSpec 中实例化变量吗?
看起来从设置规范中实例化一个变量是可行的:
@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)
}
@Shared
变量在测试之间 未 重新评估。你观察的原因是你输出了not @Shared
变量tag
。 random.nextInt(999)+1
在每个测试方法之前进行评估。
如果你把 @Shared
放在 tag
上,值不会改变。
我的示例脚本如下所示:
@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)
}
}
在此示例中,随机 1 和随机 2 打印相同的数字,但随机 3 打印不同的数字。
例如,当我 运行 代码时,这是我的输出:
Random1: 528
Random2: 528
Random3: 285
我假设这是因为共享变量在特征方法之间被重新计算。我曾尝试将这些变量声明移到 @Shared
注释之外,但无济于事。
我想要它以便在规范的开头生成随机标记变量,并且我希望它保留其值,但我不确定如何设置全局变量来执行此操作。我需要在 setupSpec 中实例化变量吗?
看起来从设置规范中实例化一个变量是可行的:
@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)
}
@Shared
变量在测试之间 未 重新评估。你观察的原因是你输出了not @Shared
变量tag
。 random.nextInt(999)+1
在每个测试方法之前进行评估。
如果你把 @Shared
放在 tag
上,值不会改变。