c# - 无法使用 Sqlite 在 Xunit 上初始化数据库
问题描述
我在我的主项目中创建了一个初始化程序,其中生成了数据库并加载了信息。
现在我想做同样的过程,但是对于我的测试项目,我的问题是如何为测试创建一个初始化程序?
如果你愿意,为了清楚起见,我会留下我的 github 存储库。
解决方案
对于 EF-Core,您可以使用内存或 SQL-Lite 来实现您的测试。
在此处查看有关使用 sql lite 进行测试的 Microsoft 文档
基本上,您需要为您的测试传递一个新连接到 DBContext:
public class SqliteInMemoryItemsControllerTest : ItemsControllerTest, IDisposable
{
private readonly DbConnection _connection;
public SqliteInMemoryItemsControllerTest()
: base(
new DbContextOptionsBuilder<ItemsContext>()
.UseSqlite(CreateInMemoryDatabase())
.Options)
{
_connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;
}
private static DbConnection CreateInMemoryDatabase()
{
var connection = new SqliteConnection("Filename=:memory:");
connection.Open();
return connection;
}
public void Dispose() => _connection.Dispose();
}
请注意以下警告:
使用 SQLite 是测试 EF Core 应用程序的有效方法。但是,当 SQLite 的行为与其他数据库系统不同时,就会出现问题。
推荐阅读
- swiftui - .send() 和 .sink() 似乎不再适用于 Xcode 11 Beta 5 中的 PassthroughSubject
- python - 将字符串表转换为字典
- java - iText 7中每页剪切表
- javascript - 使用 ReactJS 构建时,Chrome 扩展内容脚本未注入 DOM
- c# - C# - 使用带有证书身份验证和带有 BinarySecurityToken 的数字签名的 SOAP Web 服务
- python - 如何从具有相同类的页面中的两个表中提取数据?
- javascript - 如何在 Json 响应后更新值
- r - 如何构建一个循环来导入许多数据帧并以相同的方式修改它们?
- ios - 使用未解析的标识符“NavigationLink”;您的意思是“导航视图”吗?- 斯威夫特用户界面
- ios - Swift - Save array of [String: Any] to NSUserDefauls