2009-11-13 15 views
1

背景是否因爲我爲每個MSTest測試複製數據庫文件而導致此文件鎖定問題? (使用DeploymentItem註釋)

  • 我使用MSTest的運行單元測試在VS2008。
  • 我的項目有一個SqlLite數據庫。
  • 我發現我需要安排將默認數據庫文件複製到MSTest區域以便測試能夠找到它。我使用下面的註釋關於測試代碼以作安排: [DeploymentItem( 「database.db3」)

ISSUE

  • 當我運行在 「所有測試」一旦通過VS2008,我會在其中一個測試中得到下面提到的錯誤。當我單獨運行這個測試時,它通過很好。
  • 我得到的錯誤是: 「System.Data.SQLite.SQLiteException:數據庫文件被鎖定數據庫被鎖定
  • 同樣,當我運行單獨得來這個問題上的測試工作正常&通過

問題

關於如何解決這一問題的任何意見/建議?它是由於辦法,我手動複製每一個測試的數據庫文件(即每個測試我有上述註解之一)全面測試的

例子:

/// <summary> 
///A test for process 
///</summary> 
[TestMethod()] 
[DeploymentItem("database.db3")] 
public void processTest() 
{ 
    Coordinator target = new Coordinator(); 
    target.MyConfig.clear_database(); 

    target.process(); 
} 

謝謝

+0

我有同樣的問題。我只是通過打開一個不存在的文件的連接,在我的單元測試中創建一個sqlitedb。但是我不能刪除這個文件,因爲它被鎖定了。 – tuinstoel 2009-11-13 19:00:29

+0

你必須以編程方式創建表格嗎? – Greg 2009-11-13 20:54:02

+0

是的,應用程序創建表以及單元測試。我的測試從無到有。 – tuinstoel 2009-11-14 05:47:37

回答

1

聽起來像第一個運行的單元測試會打開數據庫文件。確保關閉數據庫文件。

嘗試在您的測試夾具中使用[TestInitialize()]方法複製/創建,然後在使用[TestCleanup()]方法關閉然後刪除數據庫文件時打開數據庫文件。

+0

問題是我無法解決如何手動複製文件,注意目錄更改每個測試運行。因此,我使用了「[DeploymentItem(」IntranetSync.db3「)]」方法,似乎工作。有沒有相同的方法來刪除? (即注意到我不確定如何手動掛鉤腳本來刪除) – Greg 2009-12-25 22:52:39

0

在要刪除數據庫文件之前調用靜態方法SQLiteConnection.ClearAllPools()或SQLiteConnection.ClearPool()。

相關問題