繁体   English   中英

您如何(单元)测试数据库架构?

[英]How do you (Unit) Test the database schema?

当有很多人在从事项目工作时,所有人都可以更改数据库架构,那么对单元进行测试/测试/验证的最简单方法是什么? 到目前为止,我们的主要建议是为每个表编写测试以验证列名,约束等。

还有其他人做过类似/简单的事情吗? 如果这真的有什么不同,我们将C#与SQL Server一起使用。

更新:

  • 我们正在处理的项目部分是使用SSIS包来完成大部分工作,因此很少有C#代码可以再次编写单元测试。
  • 用于创建表/存储过程的代码分布在SQL文件中。 由于构建系统的原因,我们也可以维护一个单独的VS DB项目文件,但是我不确定这将如何帮助我们验证架构。

一种可能的答案是为数据库开发人员使用Visual Studio,并在其余代码中将架构保持在源代码控制中。 这使您可以看到差异,并获得有关谁更改内容的历史记录。

另外,您可以使用SQLCompare之类的工具来查看一个数据库与另一个数据库相比所修改的内容。

就我而言,您的(关系)数据库做了两件事:1)保存数据; 2)保存数据之间的关系。

保留数据不是一种行为,因此您不会对其进行测试

为了确保关系,只需使用约束即可。 很多约束。 到处都是。

我以前不得不做这种事情,尽管不是在C#中。 首先,基于Ode to Code(第1页,共5页)的讨论,我构建了一个模式迁移工具(也存在执行类似操作的现有工具)。 重要的是,我构建的迁移工具允许您指定要应用更改的数据库以及要应用的版本。 然后,按照测试优先的方法,每当我需要进行模式更改时,我都会编写一个测试脚本来创建一个测试数据库,将版本更改应用于目标更改脚本之前的版本,添加一些数据,然后在测试,并确认数据处于预期状态。

我的主要目的是确认在模式迁移期间没有数据丢失或损坏,而不是专门检查模式是否处于特定状态。 需要对生产数据集有很好的了解,因此您可以为测试编写代表性的样本数据。

是否应将其视为单元测试或集成测试还是有争议的。 基于我不想在每次迭代代码时都运行旧的测试这一事实,我倾向于考虑进行集成测试。 无论您想称它为什么,我都发现它是解决这种情况的有用工具。

这是一个古老的问题,但看来人们仍然在这里着陆。 因此,到目前为止,我发现的最好的工具是Red Gate的“ SQL Test”。 它允许您创建作为事务运行的脚本。 允许您运行“沙盒”查询以检查数据库状态。

这是一个有趣的问题! 有很多工具可以测试存储过程,但不能测试数据库模式。

您是否发现为代码编写的单元测试通常不会发现数据库模式有任何问题?

我使用的一种方法是编写存储过程,以将测试数据从开发人员的模式复制到测试模式。 这很粗糙而且很容易准备,因为存储过程在遇到架构之间的任何差异时通常会崩溃,但是它确实会提醒您任何尚未得知的更改。

并任命某人为负责监视架构更改的DBA吗?

这确实不适合单元测试范式。 我建议对版本进行控制架构,并将写访问权限限制在单个合格的团队成员(例如DBA或团队负责人)上,他们可以针对整个应用程序验证任何请求的更改。 模式更改不应随意进行。

您是否发现为代码编写的单元测试通常不会发现数据库模式有任何问题?

当然,这假设您的测试可以测试所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM