【发布时间】:2021-12-19 06:26:20
【问题描述】:
我在我的主项目中创建了一个初始化程序,其中生成了数据库并加载了信息。
现在我想做同样的过程,但是对于我的测试项目,我的问题是如何为测试创建一个初始化程序?
如果你愿意,为了清楚起见,我会留下我的 github 存储库。
【问题讨论】:
标签: c# .net api sqlite asp.net-core
我在我的主项目中创建了一个初始化程序,其中生成了数据库并加载了信息。
现在我想做同样的过程,但是对于我的测试项目,我的问题是如何为测试创建一个初始化程序?
如果你愿意,为了清楚起见,我会留下我的 github 存储库。
【问题讨论】:
标签: c# .net api sqlite asp.net-core
对于 EF-Core,您可以使用内存或 SQL-Lite 来完成您的测试。
查看Microsoft documentation on testing with sql lite here
基本上,您需要为您的测试传递一个新连接到 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 的行为与其他数据库系统不同时,就会出现问题。
【讨论】: