テストの実行中にZend_Db_Table_Abstract fetchrowがガベージデータを返すのを停止するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1643380

  •  10-07-2019
  •  | 
  •  

質問

私は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' => 'ルート'、    '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);  }

}

これは簡略化されたテストです。内部にデータがあるDBがセットアップされています(正しく接続されています)。 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 

私は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' => 'ルート'、    '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);  }

}

これは簡略化されたテストです。内部にデータがあるDBがセットアップされています(正しく接続されています)。 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という名前のクラスがありますが、これは簡単です:

<*>

私の問題は、データベースに正常に挿入できることですが、どのクエリも奇妙な結果を返します。上記のfetchRowは正しいSQLを生成しますが、返される行はガベージです-regCode、email、regDate列をまったく含まない行を返し、アフィリエイトは存在しますが、collumnは「affiliate」ではなく「users」と呼ばれます。

他のテーブルで試してみましたが、何も動作しません-データベース名を列ヘッダーとして、テーブル名を列として返すものさえあります。

注意すべきことの1つは、これをテストで実行していない場合は正常に動作することです。適切なアプリでまったく同じコードとdbがうまく機能しますが、phpUnitテストとして実行すると、すべてが厄介になります:-(

ご意見をお寄せください

乾杯、 ブリン

name = 'users'; }

私の問題は、データベースに正常に挿入できることですが、どのクエリも奇妙な結果を返します。上記のfetchRowは正しいSQLを生成しますが、返される行はガベージです-regCode、email、regDate列をまったく含まない行を返し、アフィリエイトは存在しますが、collumnは「affiliate」ではなく「users」と呼ばれます。

他のテーブルで試してみましたが、何も動作しません-データベース名を列ヘッダーとして、テーブル名を列として返すものさえあります。

注意すべきことの1つは、これをテストで実行していない場合は正常に動作することです。適切なアプリでまったく同じコードとdbがうまく機能しますが、phpUnitテストとして実行すると、すべてが厄介になります:-(

ご意見をお寄せください

乾杯、 ブリン

役に立ちましたか?

解決 2

これは、現在修正されている古いZendのバグでした

他のヒント

他のテーブル、またはregCodeフィールドを持つテーブルを持つ別のデータベースがありますか?間違ったアダプターを使用している可能性があります。これは、クエリがまだ実行される理由を説明します。テスト環境の前提条件は、少なくとも本番環境とまったく同じ構造(テーブル+フィールド)であることです。それらが異なる場合、一部のクエリは正常に実行される場合がありますが、そうでない場合もあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top