2013-02-01 28 views
1

蓋布Groovy和斯波克大師,請你告訴我爲什麼下面的代碼不爲我工作(變量「closr」給出了一個空值)擴展斯波克規範給出錯誤代碼

import geb.Browser 
import spock.lang.Specification 

class somclass extends Specification{ 
def clos = { 
    go() 

    } 
def Browser driveit(Browser browser, Closure script) { 
    script.setDelegate(browser) 
    script() 
    browser 
    } 
} 

objnew = new somclass() 
def closr = objnew.clos 
objnew.driveit(new Browser(),closr) 

雖然

import geb.Browser 

class somclass { 
def clos = { 
    go() 

    } 
def Browser driveit(Browser browser, Closure script) { 
    script.setDelegate(browser) 
    script() 
    browser 
    } 
} 

objnew = new somclass() 
def closr = objnew.clos 
objnew.driveit(new Browser(),closr) 

這一項就爲我工作(可變「closr」已關閉返回)。?在第二個唯一的區別是,我刪除擴展斯波克規範

+0

我們有猜測你的第一個版本出現錯誤? –

+0

我在第一個closr上得到null。編輯問題。 – QVSJ

+1

爲什麼要擴展規範,然後將其作爲普通腳本調用(而不是使用任何Spock)? –

回答

1

我不知道你正在努力實現這個代碼是什麼,但斯波克不能以這種方式使用。斯波克規格有經由JUnit來執行,並且他們必須符合一定的規則(例如,測試方法有像setup:expect:塊)。

+0

Spock規範必須通過JUnit執行?那是新的信息。 – QVSJ

+0

@QVSJ它在[項目頁面(https://code.google.com/p/spock/) –

+0

@tim_Yates的第三個句子它說斯波克使用JUnit運行並從Junit的啓發。如果你必須使用spock,你不必導入任何Junit庫,並且可以在導入spock.lang.specification時正常工作。只是爲了澄清,我不在尋找關於如何使用spock的更新。在我的代碼,我需要使用斯波克編寫測試,這意味着,我用已知:當:則:塊,所以我不能不使用斯波克規範和進口statements.At我要尋找一個解決方案,同時我張貼的問題(希望使用與代碼中給出:當:則:塊)。希望它有助於 – QVSJ