当我的数据库权限受到限制时,如何测试我的 Zend 框架模型


How to test my Zend Framework models when my database privileges are limited?

我正在开发一个PHP(Zend Framework 1.12.1)应用程序,它以一种独特的方式连接到数据库。

基本上,我们有一个Oracle数据库,对我来说是一个"黑匣子"。我没有直接选择、更新、插入或删除任何行或表的权限。我只能访问数据库视图(仅选择),当我想插入/更新/删除数据时,我必须调用一个或多个存储过程。我不知道实际的表结构是什么,我认为没有人会在任何时候给我访问权限。

所有这些都使我的模型单元测试变得非常困难(更不用说编写它们了),因为 ZF 似乎假设您的应用程序在数据库中具有完全权限。(这就是为什么到目前为止我只对我的模型进行了手动测试,而且我的模型有些不寻常。

我的应用程序可以工作,但我厌倦了手动测试。

以前还有其他人遇到过这种情况吗?您能否推荐在数据库权限有限的环境中实施自动化 PHPUnit 测试的具体步骤?我已经要求数据库管理员给我一个名为 resetTestData() 的存储过程,这将允许我每次从一致的状态开始运行我的测试,但我担心 ZF 不会让我使用该存储过程进行测试设置和/或拆卸。显然,Zend_Test_PHPUnit_DatabaseTestCase尝试在每次测试之前truncate数据集,然后调用getDataSet()以获取数据并重新填充数据库。变通?

3 种

不同类型的测试:- 单元测试(使用模拟等的低级别)- 集成测试(使用真实数据源的低级别)- 端到端测试(通过浏览器)

要么在不需要数据库的地方使用模拟,要么使用硒进行端到端测试,这将驱动浏览器作为用户

创建一个可测试的应用程序并不是那么容易。

你有不同类型的测试,如果你使用单元测试,你永远不应该调用数据库,Web服务,甚至文件系统资源。所有这些东西都必须被嘲笑。我知道这很难,但如果你不能,你就会有代码气味。

但是,如果您仍然需要访问数据库,则可以在放置本地 Oracle 数据库时创建自己的测试环境,并且可以根据需要处理权限。

您可以为系统创建APPLICATION_ENV,因为您可以在运行测试时读取特定配置,仅用于使用本地连接而不是 QA(例如)连接。