2012-07-10 109 views
3

我有一個測試類junit.framework.TestCase擴展junit.framework.TestCase與幾個測試methods.Each方法打開一個HTTP連接到服務器和交換請求和響應JSON字符串。一個方法得到一個字符串稱爲UID響應(類似於sessionId),我需要使用在隨後的請求到服務器。如何在JUnit測試之間共享狀態?

我以前寫這個字符串到一個文件和我的下一個請求讀取該文件的字符串。我一次運行一個方法。現在我試圖使用該字符串沒有文件操作。我維護一個hastable(因爲在我的測試類中有許多UID需要跟蹤)作爲實例變量,但最終發現該類正在爲我的每個方法調用加載,因爲我的靜態塊每次都在執行。這導致了這些UID的丟失。

如何在不寫入文件並從中讀取的情況下實現這一目標?

我懷疑我的標題是否符合我的要求。有人請相應地編輯它。

+1

顯示您的代碼。 – carlspring 2012-07-10 09:52:25

回答

4

您將需要一個靜態變量,因爲每個測試都會獲得自己的測試類實例。

使用此模式:

private static String uuid; 

private void login() { 
    // Run this only once 
    if (null != uuid) return; 

    ... talk to your server ... 
    uuid = responseFromServer.getUuid(); 
} 

@Test 
public void testLogin() { 
    login(); 
    assertNotNull(uuid); 
} 

@Test 
public void someOtherTest() { 
    login(); 

    ... test something else which needs uuid ... 
} 

@Test 
public void testWithoutLogin() { 
    ... usual test code ... 
} 

這種方法可以確保login()被要求每個需要的測試,這對自己的測試,可以獨立運行各個測試。

4

JUnit將爲每個測試創建一個類的新實例。因此,您應該使用@BeforeClass帶註釋的靜態方法將此信息設置並存儲爲類的靜態信息。

有關更多信息,請參閱this SO answer