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

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

受保护的$ db;

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

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

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

public function testName()     {        $ users = new Users();        $ select = $ users - <!> gt; select() - <!> gt; where('regCode =?','deadbeef');        $ row = $ users - <!> gt; 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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top