2012-07-13 61 views
2

我對使用Geb和Spock的Grails應用程序進行了功能測試。偶爾,功能測試會因超時或其他零星行爲而失敗。在之前使用TestNG的項目中,我會讓retryAnalyzer在測試執行過程中觸發一次重試,以查看它是否兩次都失敗(然後失敗)。Spock如何才能重試失敗的Geb測試?

如何讓Spock重試失敗的測試?

回答

2

你必須寫一個小的JUnit規則(例如像https://gist.github.com/897229)或斯波克擴展。你可能不得不忍受一些限制,比如同一個spec實例被重用,JUnit只報告一個單獨的測試,但希望沒有任何東西完全排除這個方法。 (想到的一件事是,嘲諷可能無法正常工作。)在斯波克的未來版本中,重複測試(或它的積木)將有可能成爲一個一流的理念,廢除這些限制。

+0

我終於走了下來JUnit的路由規則,並添加一個類似於此的一類:http://stackoverflow.com/questions/8295100/how-to-re-run-failed-junit-tests-immediately。我把println語句圍繞base.evaluate()調用,我可以告訴我的規則運行的,但是我發現它總是* *回報,我從來沒有看到一個Throwable的拋出,甚至失敗。還有另一種方法可以告訴測試失敗嗎? – 2012-10-19 17:31:19

8

我知道這個問題已經有一年了,但我們一直有同樣的問題。遵循彼得的建議,我創建了一個Spock擴展(https://github.com/anotherchrisberry/spock-retry)。

如果你有一個基本規範(這是我們的情況下),你可以再補充一個@RetryOnFailure註解吧:

@RetryOnFailure 
class BaseFunctionalSpec extends Specification { 
    // all tests will execute up to two times before failing 
} 

或者,您也可以將其添加到特定的功能:

class SomeSpec extends Specification { 

    @RetryOnFailure(times=3) 
    void 'test something that fails sporadically'() { 
     // will execute test up to three times before failing 
    } 
} 
+0

我期待着嘗試一下。 – 2013-10-29 21:42:31

+2

這是最好的擴展 – 2015-06-25 18:14:13

相關問題