我是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测试运行,它变得一塌糊涂: - (
任何建议表示赞赏
干杯, 布林
答案 0 :(得分:0)
您是否有任何其他表或甚至是具有regCode字段的表的其他数据库?您可能正在使用错误的适配器,这可以解释您的查询仍然执行的原因。测试环境的先决条件至少应与生产环境(表+字段)具有完全相同的结构。如果它们不同,某些查询可能会执行得很好,有些查询可能不会。
答案 1 :(得分:0)
这是一个现在修复的旧Zend错误