0

我对 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 列的行,然后附属公司在那里,但该列被称为“用户”而不是“附属公司”。

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

需要注意的一件事是,如果我不在测试中运行它,它可以正常工作。正确的应用程序中完全相同的代码和数据库工作得很好,但是作为 phpUnit 测试运行并且它变得很棘手:-(

任何建议表示赞赏

干杯,布林

4

2 回答 2

0

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

于 2009-10-29T14:20:38.460 回答
0

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

于 2010-05-07T15:41:16.530 回答