5

機能テスト スイートの最初にすべて 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 の回答を正しい回答として受け入れましたが、役立つと思われる方のために、私の最終的な解決策の例を以下に示しました。

4

2 に答える 2

3

(未テスト) GebReportingSpecは、 Fixture Methodsを持つ最終的に拡張する GebSpec を拡張
ますspock.lang.Specification

次のように使用できます。

@Stepwise
class ExampleSpec extends GebReportingSpec {
    def setupSpec(){
       super.setupSpec()
       //setup your data
    }

    def cleanupSpec(){
       super.cleanupSpec()
       //I do not think you would need anything else here
    }

    def "This is test 1"(){

    }

    def "This is test 2"(){

    }
}

単一のテスト ケースでは状態が維持されないため、セットアップをテスト メソッドの 1 つとして使用することはできません。こんなふうになります:-

setup called -> test1 -> teardown called  
setup called -> test2 -> teardown called  
setup called -> test3 -> teardown called  
.........
于 2013-06-18T01:27:37.040 に答える