2015-04-07 10 views
0

我想讓我的geb-spock功能測試以指定的順序運行,因爲SpecA將在其運行期間創建SpecB所需的數據。Grails測試套件 - 指定測試訂單

這個問題是關於按規格運行規格,而不是規範中的單個測試方法。

我已經嘗試更改規範名稱來指示執行順序,但沒有奏效。我找到了一個使用測試套件的解決方案,並且按順序將測試添加到套件中,但是我找不到如何在Grails中使測試套件工作。

將它們明確指定爲grails test-app functional: SpecA SpecB不是一個長期選項,因爲會添加更多規格。

+0

如果你想,你在第一次測試中初始化一些數據,然後在第二次使用這些數據,所以這是非常非常糟糕的主意。例如:當你在SpecB測試中出現錯誤時,你會遇到這種情況,所以一切都很好,你應該只運行兩個測試,一個是預先初始化數據的東西。所以在src類或接口中創建好的解決方案,最後是更好的初始化數據。例如:createuser(String email); – Koloritnij

+0

我目前正在做獨立測試,但我想知道是否可以指定執行順序。 – Giannis

+0

我認爲他們按名稱排序。 – Koloritnij

回答

0

對於順序或任何你想運行您的任務的順序,我做以下的事情在我的build.gradle文件:

def modules = ["X", "Y", "Z", "ZZ"] 

if (modules.size() > 1) { 
    for(j in 1 .. modules.size()-1) { 
     tasks[modules[j]].mustRunAfter modules[values[j-1]]   
    } 
} 

希望有所幫助。乾杯!

0

對於你的問題不是一個真正的答案,而是一個普遍的建議 - 不要這樣做。在測試類之間引入數據設置依賴關係會使您的套件長期變得脆弱。隨着測試數量的增長以及全局狀態的大小,推測一個特定點的狀態會變得越來越難。稍後懸掛測試或引入新測試可能會打破許多下游測試。這只是要求麻煩。

理想情況下,您希望在測試之前立即設置測試所需的數據,然後再將其拆除。 Grails Remote Control plugin和測試數據夾具製造商在這裏是你的朋友。

+0

我現在已經改變了它,以便SpecB將在運行之前設置所有東西,試圖在開始時設置如何重置數據庫。無論如何,我仍然對任何實現問題目標的方法感興趣。 – Giannis

0

你應該在一個地方定義你的初始化代碼,如果它在兩個規範之間共享,創建一個超類可能是一個好主意,你可以在每個Spec的設置方法中調用方法,或者整個類專用宣佈測試方法重用。

在任何情況下,單元測試的目的只是測試一個功能,它也不應該負責設置其他測試。