私は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' =>'root'、'password' =>'xxxxxxxx'、'dbname' = >'testingdb'));
Zend_Db_Table_Abstract :: setDefaultAdapter($ this-> db); }
public function testName(){$ users = new Users(); $ select = $ users-> select()-> where('regCode =?'、'deadbeef'); $ row = $ users-> fetchRow($ select); }
}
つまり、これは簡略化されたテストです。内部にデータを含むデータベースを設定しています(正しく接続されています)。regCodeが'deadbeef'に設定されたレコードがあり、email、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列をまったく含まない行が返され、アフィリエイトは存在しますが、列は「アフィリエイト」ではなく「users」と呼ばれます。
私は他のテーブルでそれを試しましたが、何も機能しません-データベース名を列ヘッダーとして返し、テーブル名を列として返すものさえあります。
注意すべきことの1つは、これをテストで実行していない場合は正常に機能することです。適切なアプリのまったく同じコードとdbはうまく機能しますが、phpUnitテストとして実行すると、すべてが厄介になります:-(
アドバイスをいただければ幸いです
乾杯、ブリン