Windows SQLite集成测试清理(“无法打开数据库文件”)

问题描述 投票:0回答:1

我为现有的SQLite应用程序添加了2个C#集成测试。每个测试都会创建一个数据库文件(使用Guid来保证唯一性)并对数据库执行一些操作。测试单独传递,但如果一个接一个地运行则失败。第二次测试在尝试创建新的SQLiteConnection时失败,“无法打开数据库文件”。

我怀疑SQLite自己的临时文件正在阻碍。我总结的问题是:我可以做一些事情让SQLite在测试结束后正确地整理一下吗?

更多细节,以防任何相关:

  • 我正在使用MobileServiceSQLLiteStore
  • 在第一次测试完成后,在第二次测试尝试创建其数据库文件之前,我可以在%TEMP%中看到许多文件和文件夹: 档案报告20180829-1035.diagsession 文件夹39fbfdd5-5f6e-4563-9822-cb153e30e5b6.PackageExtraction 文件夹39FBFDD5-5F6E-4563-9822-CB153E30E5B6.scratch 文件夹E41DD259-1CAA-4FEF-A779-003804F6B783 文件夹E41DD259-1CAA-4FEF-A779-003804F6B783.scratch 文件夹EAFBACB1-B978-419A-98B9-07258EB35C44 文件夹EAFBACB1-B978-419A-98B9-07258EB35C44.scratch 除了1和2之外,这些都在测试结束时被删除了 - 并留下了新的报告.39FBFDD5-5F6E-4563-9822-CB153E30E5B6。当测试下一次运行时,除了1之外,它们都被移除。
c# sqlite unit-testing azure-mobile-services
1个回答
0
投票

临时SQLite文件的存在是一个红色的鲱鱼。我的代码的真正问题是我正在调用的MS MobileServiceSQLLiteStore包装器中的一行:

MobileServiceClient.EnsureFileExists(dbPath);

这最终解决了

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

正如this Stack Overflow回答指出的那样,File.Create()将使文件保持锁定状态。所以我的修复是确保文件空,解锁文件预先存在:

if (File.Exists(path)) File.Delete(path);
File.Create(path).Close();
© www.soinside.com 2019 - 2024. All rights reserved.