有没有办法设置虚拟数据库来测试 .NET Framework 4.7.2 repository/database 集成?

Is there a way to setup dummy database to test a .NET Framework 4.7.2 repository/database integration?

我正在尝试为已经构建的 .NET Framework 应用程序设置存储库和数据库之间的集成测试。我一直在尝试寻找一种方法来设置和播种测试数据库或内存数据库,我可以使用它来 运行 一些测试,但在 .NET Framework 应用程序方面看不到太多。

我看到有一个 Microsoft.EntityFrameworkCore.InMemory 库可以完成我需要的功能,但它仅适用于 .NET Core 项目 运行ning 版本 6.0。我还发现在 .NET Framework 项目中几乎没有类似的提及,但想象一下必须有一种方法。

我在这个遗留应用程序上的工作是我第一次涉足 .NET 世界,所以我可能误解了我对这个主题的研究。是否可以设置 test/in 内存数据库来集成测试 .NET Framework 应用程序?如果是这样,这样做的最佳做法是什么?

如果您真的想测试一个纯 SQL 数据库,我的建议是设置一个本地 MSSQL 服务器来测试您的应用程序及其与数据库的集成。我不知道你有什么样的项目,但假设它是一个 ASP.NET 项目(Web API p.e)你应该已经定义好了 Models 就像您将在数据库中使用的表的构建块。 EF Core 实质上将这些模型映射为数据库中的表。

定义到本地 MSSQL 服务器的新连接

1。在 Startup.cs

上定义服务
using Microsoft.EntityFrameworkCore;

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<DatabaseContext>(opt => opt
            .UseSqlServer(_config.GetConnectionString("Name"), builder =>
             {
                  builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null);
             }));
}

EnableRetryOnFailure 将确保您的应用程序在出现连接错误时重试与数据库服务器的连接。

2。定义一个ConnectionString

转到appsettings.json并添加

"ConnectionStrings": {
    "Name": "Server=(localdb)\MSSQLLocalDB;Database=myDb;Trusted_Connection=true"
  } 

此示例使用 Windows 身份验证,但您可以使用 SQL Server Authentication

3。安装 MSSQL Server Management Studio

它对可视化数据库表有很大帮助

Entitiy Framework 内存中 可用于 .NET 5.0。我建议在 MSSQL 中使用本地数据库实例是 Microsoft 自己的建议,如他们的网站

所述

The EF in-memory database often behaves differently than relational databases. Only use the EF in-memory database after fully understanding the issues and trade-offs involved, as discussed in Testing code that uses EF Core.