我在主项目中创建了一个初始化程序,其中生成数据库并加载信息。
现在我想做同样的过程,但对于我的测试项目,我的问题是如何为测试制作初始化程序?
如果您愿意,为了清楚起见,我将保留我的 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 的行为与其他数据库系统不同时,可能会出现问题。