我在项目中使用 ef core,我的存储库调用存储过程来获取结果。我想知道是否可以使用 ef core 的 inMemorydatabase 功能来测试我的存储库。
问问题
197 次
1 回答
0
你可以,但你不应该这样做。来自微软:
EF Core 附带一个内存数据库,我们用于对 EF Core 本身进行内部测试。此数据库通常不适合测试使用 EF Core 的应用程序。具体来说:
- 它不是关系数据库。
- 它不支持事务。
- 它不能运行原始 SQL 查询。
- 它没有针对性能进行优化。
在测试 EF Core 内部时,这些都不是很重要,因为我们专门在数据库与测试无关的情况下使用它。另一方面,在测试使用 EF Core 的应用程序时,这些事情往往非常重要。
https://docs.microsoft.com/en-us/ef/core/testing/#approach-3-the-ef-core-in-memory-database
Microsoft 建议改用 SQLite 内存数据库。永远记住它的生命周期:
- 数据库在打开连接时创建
- 数据库连接关闭时删除
样本:
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();
}
https://docs.microsoft.com/en-us/ef/core/testing/sqlite#using-sqlite-in-memory-databases
于 2021-01-11T18:42:04.870 回答