如何测试数据库迁移?

Paw*_*iak 18 sql-server migration unit-testing migratordotnet

我正在使用Migrator.NET为应用程序编写数据库迁移.Marc-AndréCournoyer写道:

与应用程序中的任何代码一样,您 必须测试迁移.起起伏伏的代码.将其作为持续构建过程的一部分,并在尽可能多的不同数据库和环境中进行测试.

我怎么做?假设我有创建表的Up()方法和丢弃同一个表的Down()方法,我正在使用SQL Server.测试怎么样?我应该对系统表运行SQL查询,例如select * from sys.columns,检查表是否已创建并且它是否具有正确的结构?如果我们使用NHibernate会怎么样?

编辑 我的意思是Rails ActiveRecord迁移意义上的迁移(基于C#代码以小步骤创建,修改和拆除数据库).

编辑2在这里的,我了解,我们应该测试迁移.博客帖子实际上是从Migrator的wiki链接的.

Aar*_*ght 6

你测试你的DAL - 某种集成测试吗?

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

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

您可以尝试通过查看系统目录和INFORMATION_SCHEMA视图等来验证结果,但最终确保它实际工作的唯一方法是尝试使用新对象.仅仅因为物体存在并不意味着它们具有功能性.