我对 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 测试运行并且它变得很棘手:-(
任何建议表示赞赏
干杯,布林