我只是在设计一个更大的数据库架构。它将包含一组表,几个视图和一些存储过程。由于它是一个较大类型的数据库,并且处于开发的早期阶段(实际上它仍然只处于早期设计阶段),我觉得需要一个测试套件来验证重构期间的完整性。
就应用程序逻辑而言,我非常熟悉测试概念,包括服务器端(主要是PHPUnit)和客户端(Selenium和Android测试基础架构)。
但我如何测试我的数据库架构?
对于一般的数据库,特别是MySQL,是否有某种类似的测试策略和工具?
如何在更改基础表后验证我的观点,存储过程,触发器以及上帝知道什么仍然有效?
我是否必须使用PHP层包装数据库以启用数据库逻辑测试(存储过程,触发器等)?
答案 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)
要测试数据库,您需要的一些东西是:
您不需要使用PHP层包装数据库 - 如果您遵循上述结构,则应该可以将实际数据库的DML和DDL中的完整测试套件与您的常规测试套件结合使用。