次のようなサンプルスクリプトがあります。
@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は同じ番号を印刷しますが、Random3は異なる番号を印刷します。
たとえば、これはコードを実行したときの出力です。
Random1: 528
Random2: 528
Random3: 285
これは、共有変数が機能メソッド間で再評価されるためだと思います。これらの変数宣言を@Shared
アノテーションの外に移動しようとしましたが、役に立ちませんでした。
仕様の最初にランダムタグ変数が生成され、その値を保持するようにしたいのですが、これを行うためにグローバル変数をどのように設定するかがわかりません。setupSpec内の変数をインスタンス化する必要がありますか?
@Shared
変数はテスト間で再評価されません。観察の理由は、not@Shared
変数を出力するためですtag
。random.nextInt(999)+1
各テストメソッドの前に評価されます。
を付け@Shared
てtag
も値は変わりません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加