【问题标题】:How can I do an in-memory SQL Server for integration testing?如何使用内存中的 SQL Server 进行集成测试?
【发布时间】:2019-06-30 15:39:22
【问题描述】:

我希望能够以与 Amazon 的 DynamoDb 客户端相同的方式创建数据库和表,但使用 Sql Server。这可能吗?

我正在使用 .net Core,这是用于集成测试。想我可以把代码扔进夹具里。

有人有什么想法吗?

【问题讨论】:

  • 最接近的方法是使用 LocalDB 实例并使用您在开始时创建并在结束时删除的数据库(稍微快一点的是保留数据库并且只折腾对象本身)。这不在内存中并且比使用模拟慢得多,但它是启动功能兼容的数据库的最快方法(这对于集成测试相当重要)。建议使用带 SSD 的机器...
  • 您能否更具体地说明“与亚马逊的 DynamoDb 客户端一样”。你是说 NoSQL 吗?无服务器?在记忆中?

标签: sql-server testing .net-core amazon-dynamodb


【解决方案1】:

EF Core Migrations:

“EF Core 中的迁移功能提供了一种增量方式 更新数据库架构以使其与应用程序的同步 数据模型,同时保留数据库中的现有数据。”

Create and Drop APIs

" EnsureCreated 和 EnsureDeleted 方法提供了一个轻量级的 用于管理数据库模式的迁移的替代方案。这些 方法在数据是瞬态的情况下很有用,并且可以 架构更改时删除。例如在原型设计期间,在 测试,或用于本地缓存。”

在运行时创建表。

然后使用Data Seeding 技术之一:

数据播种是使用初始数据填充数据库的过程 数据集。有几种方法可以在 EF 中完成 核心:

  • 模型种子数据
  • 手动迁移自定义
  • 自定义初始化逻辑

用已知数据填充它们。

【讨论】:

    【解决方案2】:

    您可以在 RAM 磁盘上启动 SQL Server(至少是日志文件)。和/或使用延迟持久性ALTER DATABASE x SET DELAYED_DURABILITY = forced。您也可以使用内存优化表,但我认为您不会完全兼容。

    顺便说一句:如果您的开发过程完全依赖于此类快捷方式,那么使用此类快捷方式是很危险的,因为开发人员很晚才会收到有关不良习惯和性能问题的反馈。

    对于这种易失性数据库(也适用于容器),您需要将一些代码添加到您的测试管道或产品中,以便实际创建和填充数据库。 (如果你使用容器,你可以考虑打包一个预填充的数据库快照)

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      相关资源
      最近更新 更多