MySQL:我如何测试我的数据库架构(外键一致性,存储过程等)

时间:2012-06-09 05:34:10

标签: mysql unit-testing testing

我只是在设计一个更大的数据库架构。它将包含一组表,几个视图和一些存储过程。由于它是一个较大类型的数据库,并且处于开发的早期阶段(实际上它仍然只处于早期设计阶段),我觉得需要一个测试套件来验证重构期间的完整性。

就应用程序逻辑而言,我非常熟悉测试概念,包括服务器端(主要是PHPUnit)和客户端(Selenium和Android测试基础架构)。

但我如何测试我的数据库架构?

  • 对于一般的数据库,特别是MySQL,是否有某种类似的测试策略和工具?

  • 如何在更改基础表后验证我的观点,存储过程,触发器以及上帝知道什么仍然有效?

  • 我是否必须使用PHP层包装数据库以启用数据库逻辑测试(存储过程,触发器等)?

2 个答案:

答案 0 :(得分:4)

数据库测试有两个方面。

  • 一个面向从业务逻辑的角度测试数据库,不应该关注持久化数据。在那个层面上有一个众所周知的技术 - ORM 。这种情况下的算法很简单:描述模型并创建一组唯一案例标准来测试所有级联操作是否按预期执行(我的意思是,如果我们创建Product并将其链接到Category,那么在保存会话之后,我们将获得在DB中编写的所有实体,其中包含之间的所有必需关系。更多的说法:一些ORM已经提供了单元测试模块(例如, NHibernate ),其中一些甚至更酷的工具:创建数据库的最简单,最快捷的方法方案,模型,测试用例:例如, Fluent NHibernate

  • 第二个面向测试数据库架构本身。为此,您可以查看一个好的库DbUnit。从官方网站引用:

  

DbUnit是一个针对数据库驱动项目的JUnit扩展(也可用于Ant),除其他外,它将数据库置于测试运行之间的已知状态。 DbUnit能够将数据库数据导入和导出XML数据集。从版本2.0开始,DbUnit在流模式下使用时也可以处理非常大的数据集。 DbUnit还可以帮助您验证数据库数据是否与预期的值集匹配

最后,我强烈建议您阅读Evolutionary Database Design中的文章“Martin Fowler's site”。它有点过时(2003年),但仍然值得一读。

答案 1 :(得分:2)

要测试数据库,您需要的一些东西是:

  1. 包含所有数据测试用例,初始数据等的测试数据库。这样您就可以每次从已知的起始位置进行测试。
  2. 一组事务(INSERT,DELETE,UPDATE),用于将数据库移动到要测试的状态。这些本身可以存储在测试数据库中。
  3. 您的一组测试 - 表示为对数据库的查询,用于实际检查您的操作结果。这些结果将由您的测试套件进行测试。
  4. 数据库可能会抛出异常,但如果您遇到异常,则可能会对数据库和数据产生更严重的担忧。您可以以类似的方式测试数据库的操作,但除了"极端情况"这应该是不太必要的,因为现代数据库引擎在其数据服务任务方面非常强大。
  5. 您不需要使用PHP层包装数据库 - 如果您遵循上述结构,则应该可以将实际数据库的DML和DDL中的完整测试套件与您的常规测试套件结合使用。