繁体   English   中英

运行测试时,如何停止Zend_Db_Table_Abstract fetchrow返回垃圾数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM