2010-08-09 314 views
1

我想了解在Visual Studio 2010單元測試中如何保持我的測試過程中添加,更新或刪除的數據事務,以便我的TestCleanup可以回滾它們的值。Visual Studio 2010單元測試

我應該使用哪些搜索條件來查找更多關於此?

乾杯

保羅

回答

3

爲什麼你需要回滾的變化?您的單元測試是否更新實時數據?如果單元測試寫得不錯,你不應該在你的測試更改之後清理乾淨,因爲它們正在改變的數據應該與測試隔離。

編輯:

這聽起來像你已經設置了用於測試的數據集,並希望確保數據集恢復到原來的狀態。我更喜歡將測試數據設置爲測試的一部分,但我知道對於複雜測試可能會很困難。

如果在ADO.NET數據源中,您可以啓動一個事務,然後在測試結束時回滾該事務。例如:

using (var transaction = db.BeginTransaction()) 
{ 
    // Do tests here 
} 
// The transaction is rolled back when disposed 

編輯2:

第三個選擇,如果你沒有交易的支持,是讓你的測試數據的一個備份,在一個地方,它不會得到修改,然後在測試結束時,恢復該備份。

+0

不,我只使用測試數據集。 如果我的測試從測試數據庫執行DELETE,那麼我真的想要在測試數據集已成功執行DELETE到其原始狀態後回滾測試數據集,以便我可以在另一個測試中使用此數據。 – 2010-08-09 22:58:40

+0

我明白了。您可以採取的另一種方法是創建測試所需的測試數據作爲該測試的設置。 – Jacob 2010-08-09 23:01:21

1

對於單元測試,您應該嘗試使用mocks而不是訪問測試數據庫。單元測試通常應該是完全獨立的(不要依賴外部來源,例如數據庫)。

如果你實際測試的數據庫調用,那麼這可能是一個集成測試在這種情況下,您可以:

  1. 在設置創建測試數據
  2. 運行代碼
  3. 斷言測試通過
  4. 刪除步驟一中插入的測試數據
+0

我有點同意單元測試通常應該是自包含的,不依賴於外部資源......但是我正在爲我的NHibernate數據提供程序編寫測試,所以我真的需要測試它是否適用於數據庫。 – 2010-08-09 23:21:04

+0

我會放棄步驟4,並確保第一步可以處理它不期望的數據。 – 2010-08-10 09:56:56

相關問題