代码之家  ›  专栏  ›  技术社区  ›  Pawel Krakowiak

如何测试数据库迁移?

  •  16
  • Pawel Krakowiak  · 技术社区  · 15 年前

    Migrator.NET

    与应用程序中的任何代码一样,您需要 必须 测试您的迁移。起起落落的代码。这是你工作的一部分 持续构建过程并对其进行测试 在尽可能多的不同数据库和 尽可能保护环境。

    我该怎么做?假设我有创建表的Up()方法和删除同一表的Down()方法,我使用的是SQL Server。测试是什么样的?我应该对系统表运行SQL查询吗 select * from sys.columns

    我指的是Rails ActiveRecord迁移意义上的迁移(基于C#代码以小步创建、修改和拆除数据库)。

    here 这是我读到我们应该测试迁移的地方。这篇博客文章实际上是从Migrator的wiki链接而来的。

    6 回复  |  直到 15 年前
        1
  •  6
  •   Aaronaught    15 年前

    您不仅需要迁移脚本,还需要基线脚本。当您想要测试数据库升级时,您应该在测试/登台服务器上运行基线中的所有脚本,以创建数据库的最新版本。然后根据最新的测试数据库测试DAL。如果所有DAL测试都成功,那么您的迁移应该已经成功(否则您的DAL测试还不够完整)。

    这是一个昂贵的测试,但它几乎坚如磐石。我个人承认,目前我做了很多手工操作;我们有一个内部迁移工具,它将应用所有脚本(包括基线),因此测试数据库设置和DAL测试是独立的步骤。但它确实有效。如果您想确保创建了一个表,没有比实际尝试向其中插入数据更好的方法了!

    您可以通过查看系统目录和 INFORMATION_SCHEMA 视图等等,但最终只有这样才能确保 工作 使用 新对象。仅仅因为对象在那里并不意味着它们是功能性的。

        2
  •  1
  •   masoud ramezani    15 年前
        3
  •  1
  •   Eric Krause    15 年前

    源代码管理用于获取当前代码库的快照。迁移用于将数据库从一个版本移动到下一个版本。因此,在将来的某个时候,您可以使用旧数据库、应用迁移并使用最新的代码库。

    describe User do
      it { should have_column :name, :type => :string }
      it { should validate_presence_of :name}       
    end
    

    所以有人改变了模型。添加测试以反映模型。添加迁移。然后提交源。
    您可以获取最新的运行测试。测试失败,因为数据库不对应。请记住运行迁移,然后重新运行测试。成功。

        4
  •  1
  •   Neal    15 年前

    您的映射应该是正确的。

        5
  •  0
  •   Rawheiser    15 年前

    我认为您最好创建一组edge case CRUD操作测试用例,以执行数据层中的实体或操作。如果其中任何一个失败,则数据库与所需的不同步。i、 e.如果字段char(20)的插入失败,因为它在数据库中只是char(15)。然后可以进行db结构比较,查看是否关闭。

    您可以通过只关注最近更改的项目,并假设已经应用了以前的更改来缩短这一过程。

        6
  •  0
  •   Khash    15 年前

    我也在寻找答案。我认为这应该在集成环境中测试,而不是在单元测试环境中测试:对于单元测试(DAL),我删除数据库并重新创建它。