Windows SQLite 集成测试清理 ("unable to open database file")
Windows SQLite Integration Test Cleanup ("unable to open database file")
我为现有的 SQLite 应用程序添加了 2 个 C# 集成测试。每个测试都会创建一个数据库文件(使用 Guid 来保证唯一性)并对数据库执行一些操作。测试单独通过,但如果 运行 一个接一个地失败。第二个测试在尝试创建新的 SQLiteConnection 时失败,"unable to open database file".
我怀疑 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 之外,这些都在测试结束时被删除 -- 并留下新的 Report.39FBFDD5-5F6E-4563-9822-CB153E30E5B6。当接下来的测试 运行s 时,除了 1.
之外,它们都被删除了
临时 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();
我为现有的 SQLite 应用程序添加了 2 个 C# 集成测试。每个测试都会创建一个数据库文件(使用 Guid 来保证唯一性)并对数据库执行一些操作。测试单独通过,但如果 运行 一个接一个地失败。第二个测试在尝试创建新的 SQLiteConnection 时失败,"unable to open database file".
我怀疑 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 之外,这些都在测试结束时被删除 -- 并留下新的 Report.39FBFDD5-5F6E-4563-9822-CB153E30E5B6。当接下来的测试 运行s 时,除了 1. 之外,它们都被删除了
临时 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();