[英]How can I stop Zend_Db_Table_Abstract fetchrow returning garbage data when running tests?
我对Zend并不陌生,在创建单元测试时遇到了一些困难。 我将其简化为一个最小的测试类,该类仍然可以复制该问题,以期我正在做一些愚蠢的事情:
class UserRegistrationsTest extends PHPUnit_Framework_TestCase
{
受保护的$ db;
公共功能__construct($ name = NULL){parent :: __ construct($ name);
$ this-> db = Zend_Db :: factory('Pdo_Mysql',array('host'=>'127.0.0.1','username'=>'root','password'=>'xxxxxxxx','dbname'= >'testingdb'));
Zend_Db_Table_Abstract :: setDefaultAdapter($ this-> db); }
公共功能testName(){$ users = new Users(); $ select = $ users-> select()-> where('regCode =?','deadbeef'); $ row = $ users-> fetchRow($ select); }
}
因此,这是简化的测试。 我有一个数据库设置(正确连接),里面有数据。 有一条regCode设置为'deadbeef'的记录,并且还包含用于电子邮件,regDate和会员的字段:
CREATE TABLE testingdb.users (
regCode varchar(16) NOT NULL,
email varchar(150) NOT NULL,
regDate datetime NOT NULL,
affiliate int(10) unsigned DEFAULT NULL,
PRIMARY KEY (regCode))
我有一个名为Users.php的类,它很简单:
class Users extends Zend_Db_Table_Abstract {
protected $_name = 'users';
}
我的问题是我可以很好地插入数据库,但是任何查询都返回奇数结果。 上面的fetchRow会生成正确的SQL,但返回的行是垃圾-它返回包含regCode,email,根本没有regDate列的行,然后该会员存在,但该列称为“用户”而不是“会员”。
我已经在其他表上尝试过了,但是没有用-有些甚至返回数据库名称作为列标题以及表名称作为列。
需要注意的一件事是,如果我没有在测试中运行它,它将运行正常。 在适当的应用程序中,完全相同的代码和db可以很好地工作,但是作为phpUnit Test运行时,它变得很棘手:-(
任何建议表示赞赏
干杯,布莱恩
您是否有任何其他表,甚至另一个数据库的表具有regCode字段? 您可能使用了错误的适配器,这将解释为什么查询仍然执行。 测试环境的前提条件是至少具有与生产环境完全相同的结构(表+字段)。 如果它们不同,则某些查询可能执行良好,而另一些查询则可能无法执行。
这是一个古老的Zend错误,现已修复
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.