Comment puis-je empêcher le fetchrow de Zend_Db_Table_Abstract de renvoyer des données erronées lors de l'exécution de tests?

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

  •  10-07-2019
  •  | 
  •  

Question

Je suis assez nouveau sur Zend et j'ai quelques difficultés à créer mes tests unitaires. Je l'ai réduit à une classe de test minimale qui reproduit toujours le problème dans l'espoir que c'est quelque chose de stupide que je fais:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

protected $ db;

fonction publique __construct ($ name = NULL)  {   parent :: __ construct ($ name);

$ this- > db = Zend_Db :: factory ('Pdo_Mysql', array (    'hôte' = > "127.0.0.1",    'nom d'utilisateur' = > 'racine',    'mot de passe' = > 'xxxxxxxx',    'nombase' = > 'testingdb'    ));

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

fonction publique testName ()     {        $ utilisateurs = nouveaux utilisateurs ();        $ select = $ users- > select () - > where ('regCode =?', 'deadbeef');        $ row = $ utilisateurs- > fetchRow ($ select);  }

}

Il s’agit donc du test simplifié. J'ai un db mis en place (qui se connecte correctement) qui contient des données à l'intérieur. Il y a un enregistrement avec regCode réglé sur 'deadbeef' et il a aussi des champs pour email, regDate et affilié:

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

J'ai une classe appelée Users.php aussi simple que possible:

class Users extends Zend_Db_Table_Abstract {

protected 

Je suis assez nouveau sur Zend et j'ai quelques difficultés à créer mes tests unitaires. Je l'ai réduit à une classe de test minimale qui reproduit toujours le problème dans l'espoir que c'est quelque chose de stupide que je fais:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

protected $ db;

fonction publique __construct ($ name = NULL)  {   parent :: __ construct ($ name);

$ this- > db = Zend_Db :: factory ('Pdo_Mysql', array (    'hôte' = > "127.0.0.1",    'nom d'utilisateur' = > 'racine',    'mot de passe' = > 'xxxxxxxx',    'nombase' = > 'testingdb'    ));

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

fonction publique testName ()     {        $ utilisateurs = nouveaux utilisateurs ();        $ select = $ users- > select () - > where ('regCode =?', 'deadbeef');        $ row = $ utilisateurs- > fetchRow ($ select);  }

}

Il s’agit donc du test simplifié. J'ai un db mis en place (qui se connecte correctement) qui contient des données à l'intérieur. Il y a un enregistrement avec regCode réglé sur 'deadbeef' et il a aussi des champs pour email, regDate et affilié:

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

J'ai une classe appelée Users.php aussi simple que possible:

<*>

Mon problème est que je peux insérer correctement dans la base de données, mais toutes les requêtes donnent des résultats étranges. La commande fetchRow ci-dessus génère le code SQL correct, mais la ligne renvoyée est garbage - elle renvoie une ligne contenant regCode, email, aucune colonne regDate, puis l'affilié est présent, mais la colonne est appelée "utilisateurs" au lieu de "affilié".

Je l'ai essayé sur d'autres tables et aucune ne fonctionne - certaines renvoient même le nom de la base de données sous forme d'en-tête de colonne, ainsi que le nom de la table sous forme de colonne.

Une chose à noter est que si je n’exécute pas ceci dans un test, cela fonctionne bien. Le même code et la même base de données dans l’application appropriée fonctionnent très bien, mais s’exécutent comme un test phpUnit et tout devient vicieux: - (

Tout conseil apprécié

Salut, Bryn

name = 'users'; }

Mon problème est que je peux insérer correctement dans la base de données, mais toutes les requêtes donnent des résultats étranges. La commande fetchRow ci-dessus génère le code SQL correct, mais la ligne renvoyée est garbage - elle renvoie une ligne contenant regCode, email, aucune colonne regDate, puis l'affilié est présent, mais la colonne est appelée "utilisateurs" au lieu de "affilié".

Je l'ai essayé sur d'autres tables et aucune ne fonctionne - certaines renvoient même le nom de la base de données sous forme d'en-tête de colonne, ainsi que le nom de la table sous forme de colonne.

Une chose à noter est que si je n’exécute pas ceci dans un test, cela fonctionne bien. Le même code et la même base de données dans l’application appropriée fonctionnent très bien, mais s’exécutent comme un test phpUnit et tout devient vicieux: - (

Tout conseil apprécié

Salut, Bryn

Était-ce utile?

La solution 2

C’était un vieux bogue Zend qui est corrigé maintenant

Autres conseils

Avez-vous une autre table ou même une autre base de données avec une table ayant un champ regCode? Vous pourriez utiliser le mauvais adaptateur, ce qui expliquerait pourquoi votre requête est toujours exécutée. La condition préalable pour votre environnement de test serait au moins d'avoir exactement la même structure que votre environnement de production (tables + champs). Si elles diffèrent, certaines requêtes peuvent s'exécuter correctement, d'autres pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top