1

我在项目中使用 ef core,我的存储库调用存储过程来获取结果。我想知道是否可以使用 ef core 的 inMemorydatabase 功能来测试我的存储库。

4

1 回答 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 回答