2011-08-23 56 views
0

在我的例子中,我有兩種方法來啓用和禁用和帳戶,我會爲每個人寫一個測試方法。如何處理測試方法中的當前數據?

的問題是,我得考慮數據的原始狀態和測試之後,它恢復,即使是在一個樣本數據庫,以保持數據由下一個測試。

public void DisableAndEnableAccount() 
{ 
    var client = new GwIntegrationServiceSoapClient(); 

    string userName = "admin"; 
    Account account = client.GetAccountByUsername(userName); 
    int accountID = account.Id; 

    bool isActiveOrginalValue = account.IsActive; 

    if (isActiveOrginalValue) 
    { 
     client.DisableAccount(accountID); 
     account = client.GetAccountByUsername(userName); 

     Assert.IsFalse(account.IsActive); 

     client.EnableAccount(accountID); 
     account = client.GetAccountByUsername(userName); 

     Assert.IsTrue(account.IsActive); 
    } 
    else 
    { 
     client.EnableAccount(accountID); 
     account = client.GetAccountByUsername(userName); 

     Assert.IsTrue(account.IsActive); 

     client.DisableAccount(accountID); 
     account = client.GetAccountByUsername(userName); 

     Assert.IsFalse(account.IsActive); 
    } 
} 

我覺得我的測試方法不是寫得很好,任何想法如何處理這種情況?

回答

2

您應該在測試中使用測試數據(測試用戶帳戶),而不是真正的測試數據。 (實際上,強烈建議您爲測試使用單獨的測試數據庫,而不是真正的實時生產數據庫。)然後,您可以在測試之前自由設置它。順便說一下,建議在單獨的setUp()方法中進行設置(或者在JUnit 4中使用@Before進行註釋)。然而

注意,認爲「經典」單元測試不應該依賴於像數據庫或文件系統的外部實體:他們應該專注於測試一個單元(類,方法),從世界其他地區隔離。這通常通過dependency injectionmocking來實現,即將它們隱藏在接口後面,以便在單元測試中,可以提供虛擬實現,例如,沒有連接到數據庫,只是驗證對它的調用和傳遞的參數。

測試整個集成系統仍然有用,只是它不是單位,而是集成測試。單元測試可以更精細,更容易理解和維護,並且更快,所以只要有可能,最好先從單元測試開始,然後一旦確定較小的部分工作正常,則將一些集成測試放在一起以驗證該系統始終如一地工作。

+0

其實我正在處理一個web服務,我更願意處理活動的一個(在開發室),以避免更新活動數據庫模式的每個變化。 –

+0

@法國人,對不起,現在我無法理解你是否正在測試活DB? –

+0

這是一個用於開發辦公室的中央數據庫 –

0

使用此方法將數據恢復到其原始狀態時總是會遇到問題。一般來說,解決方案就是避免試圖這樣做,就像@PeterTörök指出的那樣(我幾乎完全同意他的帖子)。

許多事情可以去錯在測試中​​的各個步驟之間:如果什麼互聯網連接中斷時,你失去連接到Web服務?如果您在測試代碼中犯了錯誤,並且破壞了測試帳戶的實時數據,會發生什麼情況?

如果非得有某種自動化測試與外部Web服務,我建議來與服務的所有者的安排,能夠自動重置您的測試實體,或類似的東西。這樣,您可以專注於讓您的測試實際測試功能,而不用擔心如何將數據轉換回開始的方式。

相關問題