簡體   English   中英

Windows SQLite集成測試清除(“無法打開數據庫文件”)

[英]Windows SQLite Integration Test Cleanup (“unable to open database file”)

我為現有的SQLite應用程序添加了2個C#集成測試。 每個測試都會創建一個數據庫文件(使用Guid來保證唯一性),並對數據庫執行一些操作。 測試是孤立通過的,但是如果一個接一個地運行則失敗。 第二次測試在嘗試創建一個新的SQLiteConnection時失敗,並帶有“無法打開數據庫文件”。

我懷疑SQLite自己的臨時文件正在妨礙您。 我的總結問題是: 在測試結束時,我可以做些什么使SQLite收拾自如嗎?

以防萬一,其中一些更詳細:

  • 我正在使用MobileServiceSQLLiteStore
  • 在第一個測試完成之后,在第二個測試嘗試創建其數據庫文件之前,我可以在%TEMP%中看到許多文件和文件夾:

    1. 文件報告20180829-1035.diagsession
    2. 文件夾39fbfdd5-5f6e-4563-9822-cb153e30e5b6.PackageExtraction
    3. 文件夾39FBFDD5-5F6E-4563-9822-CB153E30E5B6.scratch
    4. 文件夾E41DD259-1CAA-4FEF-A779-003804F6B783
    5. 文件夾E41DD259-1CAA-4FEF-A779-003804F6B783.scratch
    6. 文件夾EAFBACB1-B978-419A-98B9-07258EB35C44
    7. 文件夾EAFBACB1-B978-419A-98B9-07258EB35C44.scratch

      • 在測試結束時,除了1和2外,所有這些都被刪除了,然后留下了新的Report.39FBFDD5-5F6E-4563-9822-CB153E30E5B6。 下次運行測試時,除了1以外,所有的都被刪除。

臨時SQLite文件的出現是紅色的鯡魚。 我的代碼的真正問題是我正在調用的MS MobileServiceSQLLiteStore包裝器中的一行:

MobileServiceClient.EnsureFileExists(dbPath);

最終解決

if (!File.Exists(path)) File.Create(path);

正如堆棧溢出答案所指出的那樣,File.Create()將使文件保持鎖定狀態。 所以我的解決方法是確保文件空的,未鎖定的文件事先存在:

if (File.Exists(path)) File.Delete(path);
File.Create(path).Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM