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

时间:2009-10-29 12:29:24

标签: php zend-framework phpunit

我是Zend的新手,在创建单元测试时遇到了一些困难。我已经把它剥离到了一个最小的测试类,它仍然复制了这个问题,希望这是我正在做的事情:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

受保护的$ db;

public function __construct($ name = NULL)  {   parent :: __ construct($ name);

$ this-> db = Zend_Db :: factory('Pdo_Mysql',array(    'host'=> '127.0.0.1',    'username'=> '根',    'password'=> 'XXXXXXXX',    'dbname'=> 'testingdb'    ));

Zend_Db_Table_Abstract :: setDefaultAdapter($这 - >分贝);  }

public function 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,no regDate列的行,然后会员就在那里,但是collumn被称为'users'而不是'affiliate'。

我在其他表上尝试过但没有工作 - 有些甚至将数据库名称作为列标题返回,并将表名称作为列返回。

有一点需要注意的是,如果我在测试中没有运行它,它可以正常工作。在正确的应用程序中完全相同的代码和数据库工作得很好,但作为一个phpUnit测试运行,它变得一塌糊涂: - (

任何建议表示赞赏

干杯, 布林

2 个答案:

答案 0 :(得分:0)

您是否有任何其他表或甚至是具有regCode字段的表的其他数据库?您可能正在使用错误的适配器,这可以解释您的查询仍然执行的原因。测试环境的先决条件至少应与生产环境(表+字段)具有完全相同的结构。如果它们不同,某些查询可能会执行得很好,有些查询可能不会。

答案 1 :(得分:0)

这是一个现在修复的旧Zend错误