機能テスト スイートの最初にすべて BootStrap.groovy から作成されたテスト データを使用して Web アプリケーションをテストしている、機能する / 合格する機能 geb/spock テスト (それぞれが GebReportingSpec を拡張する) が多数あります。
テスト データの作成を各 Spec 内の startup()/teardown() メソッドに移動したいのですが、実際には基本クラスから継承させたかったのですが、明らかに StepWise には継承の問題があります。
したがって、現在、各テスト スペック クラスは次のようになっています。
@Stepwise
class ExampleSpec extends GebReportingSpec {
def "valid root user logs in"() {
given: "I am at the login page"
to LoginPage
when: "I enter root's credentials"
username = "root"
password = "password"
and: "I click the login button"
loginButton.click()
then: "I am logged in and directed to the welcome page"
at WelcomePage
}
}
さて、私の問題は、テスト データを作成できる新しいテスト (最初のテストの上) を作成できないように見えることです。有効な given/when/then ステートメントがないと、テストが実行されていないように見え、既存のテスト内からメソッドを呼び出すことも機能していないように見えます。私は grails-remote-control プラグインを調べて、データを設定するためのクロージャーを正常に呼び出すことができると信じていますが、GebReportSpecs (またはいくつかの抽象的な親) 内からこれを呼び出すための最良のメカニズムについてはわかりません。 .
以下は、「setupData()」を最初のテストにするか、テスト内からそのメソッドを呼び出すことによって、私ができるようにしたいことの簡単な概要です...どちらも機能していないようです。
def remote = new RemoteControl()
def setupData() {
def id = remote {
def ShiroUser user = new ShiroUser(username: "root", ...)
user.save()
user.id
}
println(id)
}
.... Tests then follow
これらのメソッドを強制的に呼び出せる @before などの注釈はありますか?
任意の提案をいただければ幸いです。
解決策: 以下の dmahapatro の回答を正しい回答として受け入れましたが、役立つと思われる方のために、私の最終的な解決策の例を以下に示しました。