Come posso impedire a Zend_Db_Table_Abstract fetchrow di restituire dati spazzatura durante l'esecuzione dei test?

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

  •  10-07-2019
  •  | 
  •  

Domanda

Sono abbastanza nuovo con Zend e ho delle difficoltà a creare i miei test unitari. L'ho ridotto a una classe di test minima che replica ancora il problema nella speranza che sia qualcosa di stupido che sto facendo:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

protetto $ db;

funzione pubblica __construct ($ name = NULL)  {   parent :: __ construct ($ name);

$ this- > db = Zend_Db :: factory ('Pdo_Mysql', array (    'host' = > '127.0.0.1',    'username' = > 'radice',    'password' = > 'Xxxxxxxx',    'dbname' = > 'Testingdb'    ));

Zend_Db_Table_Abstract :: setDefaultAdapter ($ this- > db);  }

funzione pubblica testName ()     {        $ users = new Users ();        $ select = $ users- > select () - > where ('regCode =?', 'deadbeef');        $ row = $ users- > fetchRow ($ select);  }

}

Quindi questo è il test semplificato. Ho un db impostato (che si collega correttamente) che contiene dati al suo interno. C'è un record con regCode impostato su 'deadbeef' e ha anche campi per e-mail, regDate e affiliati:

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))   

Ho una classe chiamata Users.php che è semplice come si arriva:

class Users extends Zend_Db_Table_Abstract {

protected 

Sono abbastanza nuovo con Zend e ho delle difficoltà a creare i miei test unitari. L'ho ridotto a una classe di test minima che replica ancora il problema nella speranza che sia qualcosa di stupido che sto facendo:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

protetto $ db;

funzione pubblica __construct ($ name = NULL)  {   parent :: __ construct ($ name);

$ this- > db = Zend_Db :: factory ('Pdo_Mysql', array (    'host' = > '127.0.0.1',    'username' = > 'radice',    'password' = > 'Xxxxxxxx',    'dbname' = > 'Testingdb'    ));

Zend_Db_Table_Abstract :: setDefaultAdapter ($ this- > db);  }

funzione pubblica testName ()     {        $ users = new Users ();        $ select = $ users- > select () - > where ('regCode =?', 'deadbeef');        $ row = $ users- > fetchRow ($ select);  }

}

Quindi questo è il test semplificato. Ho un db impostato (che si collega correttamente) che contiene dati al suo interno. C'è un record con regCode impostato su 'deadbeef' e ha anche campi per e-mail, regDate e affiliati:

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))   

Ho una classe chiamata Users.php che è semplice come si arriva:

<*>

Il mio problema è che posso inserire bene nel database, ma qualsiasi domanda restituisce risultati strani. Il fetchRow sopra genera l'SQL corretto ma la riga restituita è immondizia - restituisce una riga contenente regCode, e-mail, nessuna colonna regDate, quindi l'affiliato è lì ma la colonna viene chiamata 'utenti' invece di 'affiliato'.

L'ho provato su altre tabelle e nessuno funziona, alcuni addirittura restituiscono il nome del database come intestazione di colonna e il nome della tabella come colonna.

Una cosa da notare è che se non sto eseguendo questo in un test funziona bene. Lo stesso codice esatto e il db nell'app corretta funzionano alla grande, ma funzionano come test phpUnit e diventa tutto a posto :-(

Qualche consiglio apprezzato

Saluti, Bryn

name = 'users'; }

Il mio problema è che posso inserire bene nel database, ma qualsiasi domanda restituisce risultati strani. Il fetchRow sopra genera l'SQL corretto ma la riga restituita è immondizia - restituisce una riga contenente regCode, e-mail, nessuna colonna regDate, quindi l'affiliato è lì ma la colonna viene chiamata 'utenti' invece di 'affiliato'.

L'ho provato su altre tabelle e nessuno funziona, alcuni addirittura restituiscono il nome del database come intestazione di colonna e il nome della tabella come colonna.

Una cosa da notare è che se non sto eseguendo questo in un test funziona bene. Lo stesso codice esatto e il db nell'app corretta funzionano alla grande, ma funzionano come test phpUnit e diventa tutto a posto :-(

Qualche consiglio apprezzato

Saluti, Bryn

È stato utile?

Soluzione 2

Questo era un vecchio bug di Zend che ora è stato corretto

Altri suggerimenti

Hai qualche altra tabella o anche un altro database con una tabella che ha un campo regCode? È possibile che si stia utilizzando l'adattatore errato, il che spiegherebbe perché la query viene ancora eseguita. Il prerequisito per l'ambiente di test sarebbe almeno avere la stessa struttura esatta dell'ambiente di produzione (tabelle + campi). Se differiscono, alcune query potrebbero essere eseguite correttamente, altre no.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top