我在项目中使用ef核心,我的存储库调用存储过程来获取结果。我想知道我是否可以使用ef core的内存数据库功能来测试我的存储库。
答案 0 :(得分:0)
你可以,但你不应该这样做。来自微软:
<块引用>EF Core 附带一个内存数据库,我们用于内部 EF Core 本身的测试。这个数据库一般不适合 用于测试使用 EF Core 的应用程序。具体:
在测试 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