我正在开发一个PHP(Zend Framework 1.12.1)应用程序,它以一种独特的方式连接到数据库。
基本上,我们有一个Oracle数据库对我来说是一个“黑盒子”。我没有直接选择,更新,插入或删除任何行或表的权限。我只能访问数据库视图(仅限选择),当我想插入/更新/删除数据时,我必须调用一个或多个存储过程。我不知道实际的表格结构是什么,我认为任何人都不会在任何时候让我访问。
所有这些都使单元测试我的模型非常困难(更不用说编写它们),因为ZF似乎假设您的应用程序在数据库中具有完全权限。 (这就是为什么到目前为止我只对我的模型进行了手动测试,而且我的模型有点不同寻常。)
我的申请有效,但我厌倦了手动测试。
之前还有其他人遇到过这种情况吗?您是否可以推荐在具有有限数据库权限的环境中实施自动化PHPUnit测试的具体步骤?我已经要求db admin给我一个名为resetTestData()
的存储过程,这将允许我每次从一致状态开始运行我的测试,但我担心ZF不会让我使用存储的测试设置和/或拆除的程序。显然,Zend_Test_PHPUnit_DatabaseTestCase
在每次测试之前尝试truncate
数据集,然后调用getDataSet()
来获取数据并重新填充数据库。解决?
答案 0 :(得分:1)
3种不同类型的测试: - 单元测试(低级使用模拟等) - 集成测试(使用真实数据源的低级别) - 端到端测试(通过浏览器)
使用不需要数据库的模拟或使用selenium进行端到端测试,这将以用户身份驱动浏览器
答案 1 :(得分:0)
创建一个可测试的应用程序并不是那么容易。
您有不同类型的测试,如果您使用单元测试,则永远不应该调用db,webservices,甚至是文件系统资源。所有这些东西都必须被嘲笑。我知道很难,但如果你不能有代码味道。
但是,如果您仍然需要访问数据库,则可以创建自己的测试环境,当您放置本地Oracle数据库并且可以根据需要处理权限时。
您可以为系统创建APPLICATION_ENV,因为您可以在运行测试时读取特定配置,只是为了使用本地连接而不是QA(例如)连接。