2013-05-21 48 views
0

我們有將數據加載到緩存和.the測試用例運行良好,但,當我們跑所有的測試用例一旦其花費的時間很多作爲緩存是運行測試用例多個測試用例每次都爲每個測試用例加載。有沒有什麼方法可以加載緩存一次,然後在所有測試用例中使用緩存。重用緩存

這樣做的一種方式是把所有的測試用例放在一個類中,但是由於結果很難分析,所以它的目的失敗了(每個類中大約有5-10個測試方法,並且大約有30個測試類所以生成的報告會非常大,而且沒有組織)。 我試過使用測試套件,但每次測試用例後緩存都會關閉,因爲它會逐個運行它們。

+0

一般觀察 - 雖然它可能需要一些才能創造緩存,每個測試將有助於確保創建它你的測試不能互相污染。除非它是一個只讀緩存..? –

+0

它可以污染......但我們也在單獨運行測試用例......運行所有測試用例的最終運行將在部署之前在測試環境中確保一切正常工作 – AutoMEta

+0

是否可以克隆/複製你的緩存?也許你可以創建一次緩存並複製每次測試。 –

回答

0

我會想到@BeforeClass會滿足您的需求。

有時幾個測試需要共享計算昂貴的設置 (如登錄到數據庫)。雖然這可能會影響測試的獨立性,但有時候這是一種必要的優化。 註解與@BeforeClass公共靜態無效不帶參數的方法使 它被之前的任何類中的測試方法運行一次

你可以使用這個超類中和隨後sublasses可以簡化你的代碼/測試組織。

+1

「*這樣做的一種方式是將所有測試用例放在一個類中,但由於結果難以分析,所以它的目的不明確*」< - 不確定這對於OP是否有效。 –

+0

是的。我不完全理解上面的陳述,而且我不確定分析是如何與類加載緩存時使用的代碼結構 –

+0

相關的......但是對於每個測試用例都是如此,所以它的作用一樣的東西...我們可以在測試套件中添加beforeclass,那麼我們可以只緩存加載一次 – AutoMEta

6

您可以創建抽象類,它將成爲所有測試用例的基類。緩存應該初始化到這個類中並存儲在它的靜態成員中。然後所有的測試應該使用這個緩存。

替代解決方案是實現將管理緩存的自定義測試運行器。然後,您必須使用註釋@RunWith標記需要緩存的所有測試用例,並在那裏傳遞測試運行器類。

+0

您的答案比我的好,建議抽象父類的+1。 –

+0

,看起來不錯..你可以解釋我如何使用@RunWith或如果你可以參考一個例子。 – AutoMEta

+0

靜態成員做的竅門..感謝 – AutoMEta

1

創建其中包含初始化高速緩存,然後添加所有的測試用例那裏的@BeforeClass方法的測試套件。此後,還可以輕鬆添加更多測試課程。如果有問題,請記得按照正確的順序排列。頂級套件類首先運行。

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
TestClass1.class, 
TestClass2.class 
)} 
public class TestSuiteClass { 
    @BeforeClass 
    public void initCache() { 
     //Your init code here. 
    } 
} 

一些有用的鏈接: http://junit.sourceforge.net/javadoc/org/junit/runner/RunWith.html http://junit.org/javadoc/4.9/org/junit/runners/Suite.SuiteClasses.html

稍微更全面的例子:http://www.tutorialspoint.com/junit/junit_suite_test.htm

+0

是的會嘗試此..謝謝 – AutoMEta