如何使使用数据库的测试更快?

How making tests which using database faster?

我正在为我的公司制作一些概念。目标是使我们的集成测试更快。 特别是使用 and/or 操作数据库的集成测试。我将测试分为 2 个类别和目录:

我们使用 Postgresql 9.3 版、Liquibase、Visualstudio 和 MSTest。

我们的测试执行步骤如下:

  1. 运行 测试(正在使用的项目)
  2. 创建数据库
  3. 填充数据库如果class中有一些方法需要数据库

问题:

  1. 我们在每个方法是 运行 TestInitiliaze 之前填充我们的数据库,如下所示: [TestInitiliaze] public void TestInit(){ Databaseclass.FillDatabase(); }

  2. 我们有 450 个测试正在使用该数据库。近50个测试操作数据库。

  3. 其他测试使用数据库读取测试数据,无需操作。

  4. 测试是混合的。这意味着我们有一个 class 测试正在操纵数据,而一些测试只读取数据。

目标: 使这个测试更快。我有一个概念在我们的项目中不起作用。使用数据库快照。 我的想法:

  1. 运行 测试
  2. 创建数据库
  3. 填充数据库
  4. 数据库快照
  5. [TestInitiliaze] public void testinitiliaze(){ DatabaseClass.revertToSnapshot() }
    1. 或ClassInitiliaze:DatabaseClass.revertToSnapshot()

我试着再做一个概念。但它也不适用于我们的 Postgresql 版本。 嵌套事务。

有人有其他可行的替代方案吗?

此致 哈杰姆

一种替代方法是编写集成测试,这样您就不需要不断地重新初始化数据库。这就是我们所做的。并非每个测试都需要 "fresh" 数据库。随机化名称之类的东西(即客户名称必须是唯一的 - 添加随机数),我们设法拥有 100% 独立的集成测试设置。如果这不可行,您可以 运行 分两个阶段进行集成测试(不是全部) - 首先是在开始时初始化 ONCE 的那些,然后是根据需要重新初始化数据库的其他阶段。